Сумма Python против numpy.sum NumPy

Каковы различия в производительности и поведении между использованием родной функции Python sumи NumPy numpy.sum ? sumработает с массивами NumPy, а numpy.sumработает со списками Python, и оба они возвращают один и тот же эффективный результат (не тестировались пограничные случаи, такие как переполнение), но разные типы.

>>> import numpy as np
>>> np_a = np.array(range(5))
>>> np_a
array([0, 1, 2, 3, 4])
>>> type(np_a)
<class 'numpy.ndarray')

>>> py_a = list(range(5))
>>> py_a
[0, 1, 2, 3, 4]
>>> type(py_a)
<class 'list'>

# The numerical answer (10) is the same for the following sums:
>>> type(np.sum(np_a))
<class 'numpy.int32'>
>>> type(sum(np_a))
<class 'numpy.int32'>
>>> type(np.sum(py_a))
<class 'numpy.int32'>
>>> type(sum(py_a))
<class 'int'>

Редактировать: Я думаю, что мой практический вопрос здесь заключается в том, будет ли использование numpy.sumв списке целых чисел Python быстрее, чем использование собственной Python sum?

Кроме того, каковы последствия (включая производительность) использования целого числа Python по сравнению со скалярным numpy.int32? Например, для a += 1есть ли разница в поведении или производительности, если тип aявляется целым числом Python или numpy.int32? Мне любопытно, быстрее ли использовать скалярный тип данных NumPy, такой как numpy.int32, для значения, которое много складывается или вычитается в коде Python.

Для пояснения: я работаю над моделированием биоинформатики, которое частично состоит из свертывания многомерных numpy.ndarrayв отдельные скалярные суммы, которые затем дополнительно обрабатываются. Я использую Python 3.2 и NumPy 1.6.

Заранее спасибо!

48
задан om-nom-nom 6 June 2012 в 21:08
поделиться