抱歉,如果这是一个愚蠢的问题,但我刚刚开始使用 python/numpy,我真的不确定最有效的方法。我正在为一些学生制作一个演示 N 体模拟器,但现在,我通过循环这些粒子的位置来计算粒子之间的力,可以预见,速度会像糖蜜一样慢。基本上,给定一个向量x[i],我想计算:
x[i]
n[i] = sum from j = 0 to n-1, j != i of (x[i]-x[j])^-2,
使用 numpy 函数而不是循环。如果有一种方法可以执行外部加法/乘法:
m[i,j] = x[i]-x[j], m[i,j] = x[i]*x[j],
我可以用它来进行计算。
所有采用两个输入参数的通用函数都有一个属性outer:
outer
x = np.array([1, 2, 3]) np.subtract.outer(x, x)
gives:
array([[ 0, -1, -2], [ 1, 0, -1], [ 2, 1, 0]])
and
np.multiply.outer(x, x)
结果是:
array([[1, 2, 3], [2, 4, 6], [3, 6, 9]])