Python:删除未出现在单独一维列表中的二维数组中的值

我有一个数组,例如:

array = np.array([[0,1,0,0,4,0,5,0,0],
[1,1,1,0,0,0,0,2,2],
[1,1,0,0,3,0,0,2,2],
[0,0,0,0,3,0,0,0,0],
[6,6,0,0,0,0,7,7,7]])

我也有一个列表,例如:

list = [0, 1, 2, 3, 7]

我想删除(设置为零)数组中未出现在列表中的所有值。例如:

newarray = [[0 1 0 0 0 0 0 0 0] 
            [1 1 1 0 0 0 0 2 2]
            [1 1 0 0 3 0 0 2 2]
            [0 0 0 0 3 0 0 0 0]
            [0 0 0 0 0 0 7 7 7]

这里,数组中的 4s、5s 和 6s 已被 0 替换,因为它们没有出现在列表中。我当前的解决方案在循环中使用 np.where() 删除数组中未出现在列表中的所有值的速度非常慢:

# get all unique values in array
unique_vals_in_array = np.unique(array)

# get all values in array that don't appear in list
vals_not_in_array = set(unique_vals_in_array) - set(list)

# On each loop, replace the values that do not appear in list with zero
for i in vals_not_in_array:
  new_array = np.where(array==i,0,array)

如果有人有更高效的 Pythonic 解决方案,我将不胜感激。

回答

为什么不只是遍历列表并将值添加回结果数组?

result = np.zeros_like(array)

for to_keep in [0, 1, 2, 3, 7]:
    result[array==to_keep] = to_keep


以上是Python:删除未出现在单独一维列表中的二维数组中的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>