【问题标题】:Center of mass of a numpy array, how to make less verbose?numpy数组的质心,如何减少冗长?
【发布时间】:2012-01-18 21:12:20
【问题描述】:

根据我对 numpy 的了解,it's a bad idea 一次对数组的每一行应用一个操作。广播显然是首选方法。鉴于此,我如何获取形状为(N,3) 的数据并将其转换为质心?下面是我正在使用的“坏方法”。这可行,但我怀疑它会对大型 N 造成性能影响:

CM = R.sum(0)/R.shape[0]
for i in xrange(R.shape[0]): R[i,:] -= CM

【问题讨论】:

  • 有点晚了,但scipy.ndimage.measurements.center_of_mass 可能是一个相关的功能要知道...

标签: python numpy


【解决方案1】:

根据您的定义,您可以将质心计算简化为:

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

【讨论】:

    【解决方案2】:

    试试

    R -= R.sum(0) / len(R)
    

    相反。广播会自动做正确的事。

    【讨论】:

    • 所以错误是试图将CM 数组硬塞到减法中,而不是一次性解决它?
    • @Hooked:你也可以使用CM = R.sum(0) / len(R); R -= CM,但我认为中间变量并不能真正提高可读性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2015-03-27
    • 2016-06-10
    相关资源
    最近更新 更多