簡體   English   中英

大量元素比較

[英]Numpy element-wise comparisons

我正在嘗試做這樣的事情:

I[ xr1,c1 > xr2,c2 ]

其中R I,C I∈{0,1,2,...,N}是行和列索引,分別與I [·]是一個指標函數,其值是1,如果條件為真,否則為0 。

我無法進行此設置。 我可以通過以下方法輕松地遍歷所有內容

for r1 in range(0,n):
    for c1 in range(0,n):
        for r2 in range(0,n):
            for c2 in range(0,n):
                #do something with (r1,c1,r2,c2)

但是,我正在嘗試對這些代碼進行矢量化處理,以提高效率並進行一次比較。 我怎樣才能做到這一點? 我正在使用numpy


說明更新:

我正在訓練一個簡單的微笑分類器,其分析灰度圖像的x∈R 24×24,並輸出預測塊y∈{0,1},指示圖像是否是微笑(1)或否(0)。 分類器將根據輸入圖像的非常簡單的特征(包括像素值之間的二進制比較)做出決策。

每個特征的計算公式如下:

I[ xr1,c1 > xr2,c2 ]

其中R I,C I∈{0,1,2,...,N}是行和列索引,分別與I [·]是一個指標函數,其值是1,如果條件為真,否則為0 。 (假設已定義n)

根據我到目前為止提到的內容,我正在嘗試為5個功能訓練一個整體的微笑分類。 如果認為圖像正在微笑,則合奏的輸出為1,否則為0。 這由整個5個成員的平均預測確定。 如果5個整體預測變量中有超過一半的人認為圖像在微笑,則整體表示微笑。 否則,合奏表示它沒有微笑。

這就是我想要做的:

在每輪j上,我要選擇第j個特征(r1,c1,r2,c2),以便–將其添加到已選擇的j-1個特征集合中時–總體分類器在訓練集最大化。 更具體地說,在每個回合j,如果當前元組是最好的(對於回合j),我正在考慮每個可能的像素位置元組(r1,c1,r2,c2),然后將其保存為我的“迄今為止最好的”代表第j輪。 如果沒有,我會忽略它。 然后,我繼續到下一個可能的像素位置元組,並重復直到搜索完所有像素為止。 在第j輪結束時,我將為該輪選擇最佳功能,並將其添加到我選擇的功能集中。 一旦添加,它將永久保留在集合中–永遠無法刪除。 (否則,根本就不會是達成共識的算法。)然后我繼續進行j + 1輪,直到您完成了所有5輪回合。

我不需要整個事情的幫助。 我只是在尋找一種矢量化代碼的方法,而不必使用嵌套的循環

利用廣播

first = np.reshape(array, (*array.shape, 1, 1))
second = np.reshape(array, (1, 1, *array.shape))

result = (first > second)

或者,我們可以使用np.greater.outer ,它對元素的每個唯一排列執行大於比較:

result = np.greater.outer(array, array)

這將產生一個np.ndarray形狀(*array.shape, *array.shape)其中result[r1, c1, r2, c2]是你想要的值。

例:

array = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])

first = np.reshape(array, (*array.shape, 1, 1))
second = np.reshape(array, (1, 1, *array.shape))

result = (first > second)

print(result[0, 0, 1, 1]) # 1 > 6
print(result[1, 1, 0, 1]) # 6 > 2
print(result[0, 3, 0, 2]) # 3 > 2

輸出:

False
True
True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM