web-dev-qa-db-ger.com

Initialisiert ein numpy-Array mit unbekannter Länge

Ich möchte in der Lage sein, ein numpy-Array im Handumdrehen zu "bauen", ich kenne die Größe dieses Arrays nicht im Voraus.

Zum Beispiel möchte ich so etwas machen:

a= np.array()
for x in y:
     a.append(x)

Was dazu führen würde, dass alle Elemente von x enthalten sind, ist dies offensichtlich eine triviale Antwort. Ich bin nur neugierig, ob das möglich ist.

33
user1220022

Erstellen Sie eine Python-Liste und konvertieren Sie diese in ein Numpy-Array. Dies erfordert eine amortisierte O(1) Zeit pro Anhang + O ( n ) für die Umwandlung in ein Array, insgesamt also 0 ( n ).

    a = []
    for x in y:
        a.append(x)
    a = np.array(a)
66
Fred Foo

Du kannst das:

a = np.array([])
for x in y:
    a = np.append(a, x)
8
alexisdm

Da y ein Iterer ist, kann ich nicht verstehen, warum die Aufrufe angehängt werden:

a = np.array(list(y))

geht und es geht viel schneller:

import timeit

print timeit.timeit('list(s)', 's=set(x for x in xrange(1000))')
# 23.952975494633154

print timeit.timeit("""li=[]
for x in s: li.append(x)""", 's=set(x for x in xrange(1000))')
# 189.3826994248866
4
Mr_and_Mrs_D

Für die Nachwelt denke ich, dass dies schneller geht:

a = np.array([np.array(list()) for _ in y])

Sie können sogar einen Generator übergeben (d. H. [] -> ()). In diesem Fall wird die innere Liste nie vollständig im Speicher abgelegt.


Antwort auf folgenden Kommentar:

>>> import numpy as np
>>> y = range(10)
>>> a = np.array([np.array(list) for _ in y])
>>> a
array([array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object),
       array(<type 'list'>, dtype=object)], dtype=object)
1
BenDundee
a = np.empty(0)
for x in y:
    a = np.append(a, x)
0
chiefenne