Frage

Wenn Sie einen 1D-Array in Python erstellen ist es ein Nutzen des NumPy Paket zu verwenden?

War es hilfreich?

Lösung

Es hängt alles davon ab, was Sie vorhaben, mit dem Array zu tun. Wenn alles tun Sie ist Arrays von einfachen Datentypen erstellen und dabei I / O, die Array Modul reicht völlig aus.

Wenn auf der anderen Seite, können Sie jede Art von numerischen Berechnungen tun wollen, das Array-Modul bietet keine Hilfe mit diesen. NumPy (und SciPy ) gibt Ihnen eine Vielzahl von Operationen zwischen Arrays und speziellen Funktionen, die nicht nur für die wissenschaftliche Arbeit nützlich sind, aber für Dinge wie erweiterte Bildmanipulation oder allgemein etwas, wo Sie effiziente Berechnungen mit großen Datenmengen durchführen müssen.

Numpy ist auch viel flexibler, z.B. es unterstützt Arrays jede Art von Python-Objekten, und ist auch in der Lage „nativ“ mit eigenen Objekten zu interagieren, wenn sie an den array Schnittstelle .

Andere Tipps

Kleines Bootstrapping zum Nutzen wer auch immer diese nützlich finden könnte (im Anschluss an der ausgezeichneten 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 Mühe, aber wenn man mehr als nur die Speicherung verdoppelt müssen dann numpy.resize ist keine schlechte Wahl, nachdem alle (wenn sie richtig verwendet wird).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top