如何简化numpy数组的质心计算?

3 投票
2 回答
8277 浏览
提问于 2025-04-17 10:33

根据我对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)

这个方法。广播功能会自动处理好一切。

撰写回答