从 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()
.
我有三个 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)
.
你在你的问题中提到在你的实际情况下你最多可以有 50 个数组?将它们存储在列表中并使用 sum()
或将它们存储在 3 维 numpy 数组中并使用 your_numpy_array.sum()
.