如何在 numpy 数组上应用掩码,如果掩码的值为 True,则原始值保持不变,如果为 False,则将其设置为零?
How can one apply a mask on a numpy array which leaves the original values unchanged if the mask's value is True and sets it to zero if False?
我有一个 3D numpy 数组:
image = np.random.random((2, 2, 3))
[[[0.01188816 0.46263957 0.00943777]
[0.0742566 0.8375209 0.259363 ]]
[[0.30823133 0.17924745 0.74292469]
[0.68490255 0.03143513 0.68233715]]]
和面具:
[[[ True True True]
[False False False]]
[[False False False]
[False False False]]]
期望的输出:
[[[0.01188816 0.46263957 0.00943777]
[0 0. 0. ]]
[[0. 0. 0. ]
[0. 0. 0. ]]]
因此,原始数组应该根据掩码进行修改-如果掩码的值为False,则条目应设置为0,否则保持不变。
我尝试了什么:
(image[unknown_array])
[0.01188816 0.46263957 0.00943777]
这确实给出了正确的值,但没有零。我怎样才能把零放到正确的位置?
非常感谢您的帮助。
您可以使用不同的方式来完成:
x = np.arange(1,7).reshape(2,3) # numbers from 1 to 6
mask = x % 2 == 0 # mask for even numbers
print(x, mask)
# (array([[1, 2, 3],
# [4, 5, 6]]),
# array([[False, True, False],
# [ True, False, True]]))
Szczesny 建议可能是最简单的:
y = x * mask
print(y)
# array([[0, 2, 0],
# [4, 0, 6]])
“手动”填充 y
数组:
y = np.zeros_like(x)
y[mask] = x[mask]
print(y)
# array([[0, 2, 0],
# [4, 0, 6]])
我有一个 3D numpy 数组:
image = np.random.random((2, 2, 3))
[[[0.01188816 0.46263957 0.00943777]
[0.0742566 0.8375209 0.259363 ]]
[[0.30823133 0.17924745 0.74292469]
[0.68490255 0.03143513 0.68233715]]]
和面具:
[[[ True True True]
[False False False]]
[[False False False]
[False False False]]]
期望的输出:
[[[0.01188816 0.46263957 0.00943777]
[0 0. 0. ]]
[[0. 0. 0. ]
[0. 0. 0. ]]]
因此,原始数组应该根据掩码进行修改-如果掩码的值为False,则条目应设置为0,否则保持不变。
我尝试了什么:
(image[unknown_array])
[0.01188816 0.46263957 0.00943777]
这确实给出了正确的值,但没有零。我怎样才能把零放到正确的位置?
非常感谢您的帮助。
您可以使用不同的方式来完成:
x = np.arange(1,7).reshape(2,3) # numbers from 1 to 6
mask = x % 2 == 0 # mask for even numbers
print(x, mask)
# (array([[1, 2, 3],
# [4, 5, 6]]),
# array([[False, True, False],
# [ True, False, True]]))
Szczesny 建议可能是最简单的:
y = x * mask
print(y)
# array([[0, 2, 0],
# [4, 0, 6]])
“手动”填充 y
数组:
y = np.zeros_like(x)
y[mask] = x[mask]
print(y)
# array([[0, 2, 0],
# [4, 0, 6]])