如何简化numpy数组的质心计算?
根据我对numpy的了解,逐行处理数组中的每一行是个不太好的主意。使用广播(broadcasting)显然是更好的方法。那么,如何将形状为 (N,3)
的数据转换到质心(中心)呢?下面是我正在使用的“坏方法”。这个方法可以工作,但我怀疑在处理大数据量时(即大 N
)性能会受到影响:
CM = R.sum(0)/R.shape[0]
for i in xrange(R.shape[0]): R[i,:] -= CM
2 个回答
9
根据你定义的内容,你可以把质心的计算简化成:
R -= R.mean(axis=0)
如果你数组中的不同元素有不同的质量,定义在 mass
中,那么我会使用:
R -= np.average(R,axis=0,weights=mass)
可以查看这个链接了解更多信息:http://docs.scipy.org/doc/numpy/reference/generated/numpy.average.html
8
试试
R -= R.sum(0) / len(R)
这个方法。广播功能会自动处理好一切。