2 回答

TA贡献1853条经验 获得超9个赞
创建满足您条件的布尔掩码。将 0 添加到布尔值会将它们转换为数字结果:
import numpy as np
arr = np.array([[[1.0, 2.0, 3.0],[1.5, 1.8, 3.2]],
[[1.3, 1.7, 1.9],[1.4, 1.9, 2.1]],
[[1.8, 2.2, 2.5],[2.0, 2.2, 2.8]]])
arr_out = ((arr>=1.5) & (arr<=2.4)) + 0
print(arr_out)
或者:
arr_out = np.array(((arr>=1.5) & (arr<=2.4)), dtype=np.uint8)
print(arr_out)
或者,正如@hpaulj 所建议的:
arr_out = ((arr>=1.5) & (arr<=2.4)).astype(int)
print (arr_out)
输出:
[[[0 1 0]
[1 1 0]]
[[0 1 1]
[0 1 1]]
[[1 1 0]
[1 1 0]]]

TA贡献1752条经验 获得超4个赞
您可以使用掩码和np.where:首先创建一个结合两个边界条件的条件掩码,然后将其传递给np.where. 矩阵将1在此条件成立的情况下分配为True 否则,0如果其为 False
最小的工作答案
import numpy as np
arr = np.array([[[1.0, 2.0, 3.0],[1.5, 1.8, 3.2]],
[[1.3, 1.7, 1.9],[1.4, 1.9, 2.1]],
[[1.8, 2.2, 2.5],[2.0, 2.2, 2.8]]])
mask = ((arr>1.5) & (arr<2.4))
arr = np.where(mask, 1, 0)
print (arr)
输出
array([[[0, 1, 0],
[0, 1, 0]],
[[0, 1, 1],
[0, 1, 1]],
[[1, 1, 0],
[1, 1, 0]]])
添加回答
举报