簡體   English   中英

計算給定掩碼中兩個 numpy 數組中相等元素的數量

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

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