Каковы различия в производительности и поведении между использованием родной функции 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.
Заранее спасибо!