簡體   English   中英

通過將元素與一維列表進行比較來屏蔽二維 numpy 數組

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

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