如何提高这段Python代码的性能?

4

我能否优化下面附上的Python代码?它现在对我来说似乎太慢了。

C_abs = abs(C)
_, n = C_abs.shape

G = np.zeros((n, n))
for i in xrange(n):
    for j in xrange(n):
        G[i,j] = C_abs[i,j]+C_abs[j,i]

这段代码为什么能够工作,因为如果d<n,在您的循环中C_abs的索引会出错? - Colonel Beauvel
1个回答

6

只需将C_abs与它的转置版本相加即可-

G = C_abs + C_abs.T

为了理解,请看代码中的计算部分:

G[i,j] = C_abs[i,j]+C_abs[j,i]

右侧的第一个输入是C_abs [i,j],其涉及的迭代器与赋值左侧的G [i,j]相同。因此,为了获得矢量化解决方案,我们将不加更改地使用它作为第一个输入。右侧的第二个输入是C_abs [j,i],其迭代器翻转为左侧的迭代器- G [i,j]的反向版本。在整个数组上下文中进行翻转将是C_abs的转置。因此,组合起来,我们将添加C_abs和其自身的转置版本以以矢量方式获得所需的输出。

酷!太棒了! - xxx222

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接