python - 向量化 numpy 循环

标签 python numpy vectorization

我一直在尝试对以下代码的循环进行矢量化。 (已编辑评论)

M, N, F = 10, 50, 30
ts = np.linspace(0.001,3,M)
v = np.random.rand(N,1)
A = np.random.rand(N,N)
D = np.zeros(shape=(N,N,M)) 
for i, t in enumerate(ts):
   for x in range(0,N): 
      for y in range(x,N): 
         D[x,y,i] = np.sum( np.exp(-t * v[0:F]) * A[x,0:F] * A[y,0:F] )
         D[y,x,i] = D[x,y,i]

我一直在阅读其他问题,但不知道如何在这里应用它。

建议?

最佳答案

这是使用 broadcasting 组合的矢量化方法和矩阵乘法 np.dot -

# Get r,c indices corresponding to indices along dim-0,1 for o/p
r,c = np.triu_indices(N)
vals = (A[r,:F] * A[c,:F]).dot(np.exp(v[:nf,None]*(-ts)))

# Initialize o/p array and assign values
out = np.empty(shape=(N,N,M))
out[r,c,:] = vals
out[c,r,:] = vals

关于python - 向量化 numpy 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136977/

相关文章:

从接近阈值的 Numpy 数组中删除元素的 Pythonic 方法

python - 应用transform() pandas时如何识别变化的值

python - 正确选择由字典组成的数据库

python - python开发的Jedi/rope/emacs配置

python - 将 numpy 数据插入到更大的零数组中

python - 如何以内存有效的方式在Python中将矩阵一分为二?

c++ - 内部 if 语句杀死矢量化

performance - 如何在 MATLAB 中编写矢量化函数

Pandas:将 timedelta 列添加到 datetime 列(矢量化)

python - 当数据类型为对象时求列的平均值