我嘗試根據元組串列創建 numpy.array 的掩碼。這是我產生預期結果的解決方案:
import numpy as np
filter_vals = [(1, 1, 0), (0, 0, 1), (0, 1, 0)]
data = np.array([
[[0, 0, 0], [1, 1, 0], [1, 1, 1]],
[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
[[1, 1, 0], [0, 1, 1], [1, 0, 1]],
])
mask = np.array([], dtype=bool)
for f_val in filter_vals:
if mask.size == 0:
mask = (data == f_val).all(-1)
else:
mask = mask | (data == f_val).all(-1)
輸出/掩碼:
array([[False, True, False],
[False, True, True],
[ True, False, False]]
問題是,隨著data陣列的增大和 中元組數量的增加filter_vals,它變得越來越慢。它有什么更好的解決方案嗎?我嘗試使用np.isin(data, filter_vals),但它沒有提供我需要的結果。
uj5u.com熱心網友回復:
使用廣播的經典方法是:
*A, B = data.shape
(data.reshape((-1,B)) == np.array(filter_vals)[:,None]).all(-1).any(0).reshape(A)
然而,這將是記憶體昂貴的。因此,適用性實際上取決于您的用例。
輸出:
array([[False, True, False],
[False, True, True],
[ True, False, False]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400538.html
上一篇:我的函式即使不應該計算負數
