Fel*_*lix 2 python numpy centering
我有一个包含4列的数据集:x,y,z和value,让我们说:
x y z value
0 0 0 0
0 1 0 0
0 2 0 0
1 0 0 0
1 1 0 1
1 2 0 1
2 0 0 0
2 1 0 0
2 2 0 0
Run Code Online (Sandbox Code Playgroud)
我想计算CM = (x_m,y_m,z_m)所有值的质心.在本例中,我希望看到(1,1.5,0)输出.
我认为这一定是一个微不足道的问题,但我无法在互联网上找到解决方案.scipy.ndimage.measurements.center_of_mass似乎是正确的,但不幸的是,函数总是返回两个值(而不是3).另外,我找不到任何关于如何ndimage从数组中设置的文档:我会使用n形状的数组N (9,4)吗?然后N [:,0]是x坐标吗?
任何帮助都非常感谢.
我能想到的最简单的方法是:只需找到每个组件贡献加权的质量组件坐标的平均值.
import numpy
masses = numpy.array([[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 2, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 2, 0, 1],
[2, 0, 0, 0],
[2, 1, 0, 0],
[2, 2, 0, 0]])
nonZeroMasses = masses[numpy.nonzero(masses[:,3])] # Not really necessary, can just use masses because 0 mass used as weight will work just fine.
CM = numpy.average(nonZeroMasses[:,:3], axis=0, weights=nonZeroMasses[:,3])
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 scipy 质心:
from scipy import ndimage
import numpy
masses = numpy.array([[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 2, 0, 0],
[1, 0, 0, 0],
[1, 1, 0, 1],
[1, 2, 0, 1],
[2, 0, 0, 0],
[2, 1, 0, 0],
[2, 2, 0, 0]])
ndimage.measurements.center_of_mass(masses)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14006 次 |
| 最近记录: |