您可以改进代码 – 3D 数组中的迭代吗?
我已经知道在 python 中对数组的迭代非常慢。如果可能,您能否改进此代码。我只想从 numpy 数组中获取值,这些值大于 constat (1.4) 否则设置为零。
def array_max(a):
b = a
for i in range(a.shape[0]):
for j in range(a.shape[1]):
for k in range(a.shape[2]):
if a[i, j, k] <= 1.4:
b[i,j,k] = 0
return b
回答
您应该直接索引:
a[a < 1.4] = 0
该行b = a是多余的,因为它不制作副本,只是分配给一个新名称。
如果您想创建一个新数组而不是修改原始数组,您可以通过几种不同的方式来实现:
b = a.copy()
b[a < 1.4] = 0
或者
b = np.zeros_like(a)
mask = a >= 1.4
b[mask] = a[mask]
或者
b = np.where(a <= 1.4, 0, a)