[英]Count number of equal elements in two numpy array in a given mask
給定兩個 arrays 和一個掩碼,我想計算兩個 arrays 中元素的交集,其中掩碼的值為 1。即:
arr_a = [0 0 0 1 1 3 2 1]
arr_b = [0 0 0 1 2 3 2 1]
mask_ = [0 0 1 1 1 1 1 0]
arr_a 和 arr_b 之間的簡單交集,使用以下行計算為 7。
np.sum(arr_a == arr_b)
但是我希望它只有 4,因為我對掩碼內的相同值感興趣。 numpy 線是否有一個簡單的擴展來優雅地做到這一點?
只需將您的掩碼轉換為 dtype dtype=np.bool
的 numpy 數組,以便您可以使用它來過濾 arrays 或相等測試本身:
import numpy as np
arr_a = [0, 0, 0, 1, 1, 3, 2, 1]
arr_b = [0, 0, 0, 1, 2, 3, 2, 1]
mask_ = [0, 0, 1, 1, 1, 1, 1, 0]
np.equal(arr_a, arr_b)[np.asarray(mask_, dtype=np.bool)].sum()
如果要屏蔽輸入 arrays,那么最直觀的方法是使用屏蔽 arrays 。
第一步是將您的mask_ ( int列表)轉換為bool數組,但要進行反轉(因為掩碼 arrays 中的掩碼中的True意味着排除有問題的元素):
mask_b = np.invert(np.array(mask_).astype(bool))
結果是:
array([ True, True, False, False, False, False, False, True])
下一步是創建屏蔽的 arrays ( arr_am和arr_bm ):
arr_am = np.ma.array(arr_a, mask=mask_b)
arr_bm = np.ma.array(arr_b, mask=mask_b)
將兩個源 arrays 都屏蔽后,您可以運行原始代碼:
np.sum(arr_am == arr_bm)
或者
(arr_am == arr_bm).sum()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.