擅长:python、mysql、java
<p>我已经尽力了。很容易更有效地生成<code>bb_res</code>,但我无法优化双<code>for</code>循环。在我的电脑上,我的方法大约快26%。另外,基于你对问题的陈述,我认为你的代码中有一个bug,我在评论中指出了这一点。我已经在我的答案中修复了这个错误,因此它产生的输出与您的代码略有不同。在</p>
<pre><code>import numpy as np
from numpy.random import rand
# create some mock data
coor = rand(502,3)
def qab(coor):
# this is the transpose of your bb_res
# transposing is as simple as bb_res.T
bb_res = coor[:-1] - coor[1:]
nq = bb_res.shape[1]
out = np.zeros((3,3))
for i in xrange(0, nq):
for j in xrange(0, i):
tmp = np.outer(bb_res[i], bb_res[j])
out += tmp + tmp.T
out += np.outer(bb_res[i], bb_res[i])
return out / nq**2
print qab(coor)
</code></pre>