Wenn Sie ein 1d-Array in Python erstellen, gibt es einen Vorteil für die Verwendung des NumPy-Pakets?python.array versus numpy.array
Antwort
Es hängt alles davon ab, was Sie mit dem Array machen wollen. Wenn Sie nur Arrays einfacher Datentypen erstellen und I/O-Operationen ausführen, wird das array-Modul problemlos funktionieren.
Wenn Sie jedoch irgendeine Art von numerischen Berechnungen durchführen möchten, bietet das Array-Modul keine Hilfe. NumPy (und SciPy) bieten Ihnen eine Vielzahl von Operationen zwischen Arrays und speziellen Funktionen, die nicht nur für wissenschaftliche Arbeiten nützlich sind, sondern auch für fortgeschrittene Bildmanipulationen oder allgemein für alles, was Sie für effiziente Berechnungen mit großen Datenmengen benötigen.
Numpy ist auch viel flexibler, z.B. Es unterstützt Arrays jeder Art von Python-Objekten und kann auch "nativ" mit eigenen Objekten interagieren, wenn sie der array interface entsprechen.
Kleine Bootstrapping zum Nutzen wer auch immer diese nützlich finden könnten (im Anschluss an die ausgezeichnete Antwort von @dF.):
import numpy as np
from array import array
# Fixed size numpy array
def np_fixed(n):
q = np.empty(n)
for i in range(n):
q[i] = i
return q
# Resize with np.resize
def np_class_resize(isize, n):
q = np.empty(isize)
for i in range(n):
if i>=q.shape[0]:
q = np.resize(q, q.shape[0]*2)
q[i] = i
return q
# Resize with the numpy.array method
def np_method_resize(isize, n):
q = np.empty(isize)
for i in range(n):
if i>=q.shape[0]:
q.resize(q.shape[0]*2)
q[i] = i
return q
# Array.array append
def arr(n):
q = array('d')
for i in range(n):
q.append(i)
return q
isize = 1000
n = 10000000
Der Ausgang gibt:
%timeit -r 10 a = np_fixed(n)
%timeit -r 10 a = np_class_resize(isize, n)
%timeit -r 10 a = np_method_resize(isize, n)
%timeit -r 10 a = arr(n)
1 loop, best of 10: 868 ms per loop
1 loop, best of 10: 2.03 s per loop
1 loop, best of 10: 2.02 s per loop
1 loop, best of 10: 1.89 s per loop
Es scheint, dass array.array ist etwas schneller und die 'api' erspart Ihnen einige Schwierigkeiten, aber wenn Sie mehr als nur das Speichern von Doppel brauchen, dann ist numpy.resize keine schlechte Wahl (bei korrekter Verwendung).
- 1. Numpy.array Indizierung Frage
- 2. numpy.array Boolesch zu binär?
- 3. Remapping `numpy.array` mit fehlenden Werten
- 4. Indizierung eindimensionale numpy.array als Matrix
- 5. Application_Start versus OnInit versus Konstruktor
- 6. metaphone versus soundex versus NYSIIS
- 7. String.Empty versus ""
- 8. $ versus jQuery
- 9. So löschen Sie Spalten in numpy.array
- 10. Wie man theano.tensor zu numpy.array schaltet?
- 11. numpy.array zu PNG-Datei und zurück
- 12. Warum ist numpy.array() manchmal sehr langsam?
- 13. Spring: @Component versus @Bean
- 14. Emberjs filter() versus filterProperty()
- 15. Mit Malloc Versus neu
- 16. java.net versus java.nio
- 17. Leistung: XDocument versus XmlDocument
- 18. System.IO versus VisualBasic.FileIO
- 19. Trigger versus JPA Ereignis
- 20. C++ int versus long
- 21. POST versus Ajax Anruf
- 22. Serialisierung versus Datei schreiben
- 23. UIStoryboardSegue versus presentviewcontroller?
- 24. MVVM - Kontrollen versus Ansichten
- 25. `std :: alignment_of` versus` alignof`
- 26. HttpWebRequest versus Browser-Anfrage
- 27. Convert.ToInt32 versus TryParse
- 28. BOOST_FOREACH versus für Schleife
- 29. HTML5-Eingabe versus Schaltfläche
- 30. "Klassenvorlage" versus "Template-Klasse"
In Verteidigung von array.array, ich denke, es ist wichtig zu beachten, dass es auch viel leichter als numpy.array ist, und das Sprichwort 'wird gut' für ein 1D-Array sollte wirklich 'viel schneller sein, kleiner und arbeitet ohne Probleme in Pypy/Cython. ' Ich liebe NumPy, aber für einfache Arrays ist das array.array Modul eigentlich besser. –
@ J.J nie ein Array.array in meinem Leben verwendet, würde es Ihnen etwas ausmachen, einen Anwendungsfall zu geben, wenn es sinnvoll besser ist (vielleicht übernehme ich np.darray)? – VF1
@ dF. Die Verbindung zum Array-Modul ist inaktiv. Kennst du seinen neuen Standort? – Karlo