numpy: сумма очков - PullRequest
       10

numpy: сумма очков

0 голосов
/ 17 декабря 2011
>>> from pandac.PandaModules import Vec3
>>> import numpy
>>> l = []
>>> l.append( Vec3(1,1,1) )
>>> l.append( Vec3(1,1,1) )
>>> l.append( Vec3(1,1,1) )
>>> Vec3(1,1,1)+Vec3(1,1,1)
Vec3(2, 2, 2)
>>> sum(l)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'libpanda.Vec3'
>>> numpy.sum(l)
9.0
>>> 

я хочу, чтобы какой-то быстрый (быстрый == не для цикла в чистом питоне, но с большой скоростью) метод достиг:

>>> my_smart_sum(l)
Vec3(3,3,3)

1 Ответ

2 голосов
/ 17 декабря 2011

Попробуйте это:

sum(l, start=Vec3(0,0,0))

Или, с NumPy, это:

numpy.sum(l, axis=0)

Скорость зависит от реализации вектора сложения. Вы должны использовать timeit, чтобы определить, какой метод самый быстрый. Это может выглядеть примерно так:

python -m timeit "import numpy; foo = [[1,1,1],[1,1,1]]" "numpy.sum(foo, axis=0)"
10000 loops, best of 3: 46.5 usec per loop

Первая передаваемая вами строка - это инструкция установки - она ​​не будет включена во время. Вторая строка, которую вы передаете, - это код, который вы действительно хотите использовать. Я ничего не знаю о pandac, но иногда число сокращающихся циклов может быть значительно увеличено с помощью Cython .

...