[英]Masking a 2D numpy array by comparing elements to a 1D list
假設我得到了一個二維 numpy 數組和一個如下所示的數字列表:
[1 2 3 1]
[2 3 1 2]
[3 1 2 3]
[1 2 3 1]
[1, 3]
我需要找到某種方法來生成 boolean 數組,其中列表中的每個元素都會在二維數組中產生 True
[True False True True]
[False True True False]
[True True False True]
[True False True True]
我嘗試遍歷列表並使用logical_or 組合它創建的boolean 掩碼,但是二維數組是一個大圖像,列表長度可以超過300 個元素,很快就會變得非常慢。
如果 numpy 中有一些操作看起來像array in list
類似於array == list[0]
,我找不到它,但它會很有幫助。
我的代碼目前看起來像
boolean_array = array == mask_list[0]
for list_element in mask_list[0:]:
boolean_array = np.logical_or(blank_boolean, array == list_element)
return boolean_array
(np.where、np.any、np.all 也已嘗試過,但我不知道該怎么做)
(也兩個集合總是整數)
使用np.isin
import numpy as np
arr = np.array([
[1, 2, 3, 1],
[2, 3, 1, 2],
[3, 1, 2, 3],
[1, 2, 3, 1]
])
valid = np.array([1, 3])
print(np.isin(arr, valid))
[[ True False True True]
[False True True False]
[ True True False True]
[ True False True True]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.