Центр масс массива numpy, как сделать менее многословным? - PullRequest
3 голосов
/ 19 января 2012

Из того, что я знаю о numpy, плохая идея применять операцию к каждой строке массива по одному. Вещание явно предпочтительный метод. Учитывая это, как мне взять данные с формой (N,3) и перевести их в центр масс? Ниже приведен «плохой метод», который я использую. Это работает, но я подозреваю, что это приведет к снижению производительности для больших N:

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

Ответы [ 2 ]

8 голосов
/ 19 января 2012

Как вы уже определили, вы можете упростить расчет центра масс следующим образом:

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 голосов
/ 19 января 2012

Попробуйте

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

вместо этого. Вещание автоматически сделает правильную вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...