是否可以对具有两个索引的数组进行隐式迭代? 这是我想做的一个非常简单的例子:
import numpy as np
x = np.arange(3)
y = np.zeros(3)
for i in range(3):
y[i] = np.sum(x - x[i])
有一个隐式循环(求和)和一个显式循环(for i in range(3)
)...是否有可能有一个完全隐式的版本?
最佳答案
如果可能,您应该始终尝试在计算机科学之前使用数学。您的表达式 y[i] = np.sum(x - x[i])
可以用一点代数重写为 y[i] = np.sum(x) - x .size * x[i]
.这非常清楚地表明您可以在没有任何循环的情况下重写代码:
y = np.sum(x) - x.size * x
显而易见,对于大型数组,它的运行速度比@JoshAdel 的解决方案快得多,对于大小为 1000 的输入快 400 倍:
>>> x = np.random.normal(size=(1000,))
>>> np.allclose(np.sum(x - x[:,None], 1), np.sum(x) - x.size * x)
True
%timeit np.sum(x - x[:,None], 1)
100 loops, best of 3: 6.33 ms per loop
%timeit np.sum(x) - x.size * x
100000 loops, best of 3: 16.5 us per loop
关于python - 使用两个隐式循环迭代数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19117277/