我有一个 3D numpy 数组,例如a = np.zeros((100,100, 20))
。我想对每个执行操作x,y
涉及所有元素的位置z
轴,结果存储在一个数组中,例如b = np.zeros((100,100))
在同一个对应的x,y
位置。
现在我使用 for 循环来做到这一点:
d_n = np.array([...]) # a parameter with the same shape as b
for (x,y), v in np.ndenumerate(b):
C = a[x,y,:]
### calculate some_value using C
minv = sys.maxint
depth = -1
C = a[x,y,:]
for d in range(len(C)):
e = 2.5 * float(math.pow(d_n[x,y] - d, 2)) + C[d] * 0.05
if e < minv:
minv = e
depth = d
some_value = depth
if depth == -1:
some_value = len(C) - 1
###
b[x,y] = some_value
现在的问题是这个操作是much比其他人以 pythonic 方式完成的慢,例如c = b * b
(我实际上分析了这个函数,在相似数量的元素上,它比使用 numpy 内置函数和向量化函数的其他函数慢了大约 2 个数量级)
如何提高此类将 3D 数组映射到 2D 数组的函数的性能?