您可以改进代码 - 3D 数组中的迭代吗?

wea*_*man 1 python arrays performance for-loop numpy

我已经知道在 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
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 6

您应该直接索引:

a[a < 1.4] = 0
Run Code Online (Sandbox Code Playgroud)

该行b = a是多余的,因为它不制作副本,只是分配给一个新名称。

如果您想创建一个新数组而不是修改原始数组,您可以通过几种不同的方式来实现:

b = a.copy()
b[a < 1.4] = 0
Run Code Online (Sandbox Code Playgroud)

或者

b = np.zeros_like(a)
mask = a >= 1.4
b[mask] = a[mask]
Run Code Online (Sandbox Code Playgroud)

或者

b = np.where(a <= 1.4, 0, a)
Run Code Online (Sandbox Code Playgroud)