从 Numpy/Scipy 中的多个数组中提取元素

Element extraction from multiple arrays in Numpy/Scipy

我有三个 numpy 数组:A、B 和 C。我必须提取任意两个给定数组中共有的“1”(像素级),并将所有其他元素设置为 0。

import numpy as np

A = np.array([[1,0,0,0,0],
               [1,0,0,0,0],
               [1,0,0,0,0]])              

B = np.array([[1,1,1,1,1],
               [1,1,1,1,1],
               [1,1,1,1,1]])

C = np.array([[0,0,0,0,1],
               [0,0,0,0,1],
               [0,0,0,0,1]])

预期的答案是:

result = np.array([[1,0,0,0,1],
               [1,0,0,0,1],
               [1,0,0,0,1]])

如何使用 Numpy/Scipy 来完成?更快的性能是必要的,因为在我的实际问题中,数组的数量是 50s,每个数组的大小是 (3000, 3000),如果 30 个数组共有,我必须提取 '1'。

对它们求和,然后使用布尔运算检查元素是否为>=2

import numpy as np

A = np.array([[1,0,0,0,0],
               [1,0,0,0,0],
               [1,0,0,0,0]])              

B = np.array([[1,1,1,1,1],
               [1,1,1,1,1],
               [1,1,1,1,1]])

C = np.array([[0,0,0,0,1],
               [0,0,0,0,1],
               [0,0,0,0,1]])

D = A + B + C

D = (D >= 2).astype(int)

print(D)
#[[1 0 0 0 1]
# [1 0 0 0 1]
# [1 0 0 0 1]]

(D >= 2).astype(int) 将为 return 每个值为 >=2 的值为真,否则为假。然后使用 .astype(int).

将其从 True/False 值转换为 1/0 值

你在你的问题中提到在你的实际情况下你最多可以有 50 个数组?将它们存储在列表中并使用 sum() 或将它们存储在 3 维 numpy 数组中并使用 your_numpy_array.sum().