[英]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.