Jakie są różnice w wydajności i zachowaniu między używaniem natywnej funkcji Pythona sum
a NumPy's numpy.sum
? sum
działa na tablicach NumPy i numpy.sum
działa na listach Pythona i zwracają one ten sam efektywny wynik (nie testowały przypadków brzegowych, takich jak przepełnienie), ale różne typy.Suma Pythona kontra NumPy's numpy.sum
>>> 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'>
Edit: Myślę, że moje pytanie jest tu praktyczne byłoby korzystania numpy.sum
na liście liczb Python być szybciej niż przy użyciu własnego sum
Python?
Dodatkowo, jakie są implikacje (w tym wydajność) używania liczby całkowitej Python versus skalar numpy.int32
? Na przykład dla parametru a += 1
występuje różnica w zachowaniu lub wydajności, jeśli typ a
jest liczbą całkowitą Python lub numpy.int32
? Jestem ciekawy, czy jest to szybsze użycie skalarnego typu danych NumPy, takiego jak numpy.int32
dla wartości, która jest dodawana lub odejmowana w kodzie Pythona.
Dla wyjaśnienia, pracuję nad symulacją bioinformatyczną, która częściowo składa się z zapadających wielowymiarowych numpy.ndarray
s na pojedyncze sumy skalarne, które są następnie przetwarzane dodatkowo. Używam Python 3.2 i NumPy 1.6.
Z góry dziękuję!
+1, ale czy nie masz tych wyników wstecz? – dawg
@drewk, Tak, miałem je od tyłu. Dziękujemy za zwrócenie na to uwagi! Naprawiony. – Akavall
Masz rację, że 'np.sum' jest szybszy, gdy używasz' np.array'. Ale jeśli wybierzesz 'np.sum (np.array object)' i 'sum (obiekt listy)', oba wykonają prawie jednakowo. – xyres