400 Stimmen

NumPy-Array-Initialisierung (Füllen mit identischen Werten)

Ich muss ein NumPy-Array der Länge erstellen n , wobei jedes Element davon v .

Gibt es etwas Besseres als:

a = empty(n)
for i in range(n):
    a[i] = v

Ich weiß zeros y ones würde für v = 0, 1 funktionieren. Ich könnte v * ones(n) aber es wird nicht funktionieren, wenn v es None und auch wäre viel langsamer.

15voto

tnusraddinov Punkte 500

Ohne Numpy

>>>[2]*3
[2, 2, 2]

10voto

Rolf Bartstra Punkte 1473

Sie können verwenden numpy.tile z.B. :

v = 7
rows = 3
cols = 5
a = numpy.tile(v, (rows,cols))
a
Out[1]: 
array([[7, 7, 7, 7, 7],
       [7, 7, 7, 7, 7],
       [7, 7, 7, 7, 7]])

Obwohl tile dazu gedacht ist, ein Array (anstelle eines Skalars, wie in diesem Fall) zu 'kacheln', wird es diese Aufgabe übernehmen und vorgefüllte Arrays jeder Größe und Dimension erstellen.

2voto

Gabriel Soranzo Punkte 113

Wir könnten auch schreiben

v=7
n=5
a=np.linspace(v,v,n)

0voto

User9123 Punkte 340

Sie können auch Folgendes verwenden np.broadcast_to .

So erstellen Sie ein Array von Formen (Dimensionen) s und von Wert v tun können (in Ihrem Fall ist die Anordnung 1-D, und s = (n,) ):

a = np.broadcast_to(v, s).copy()

si a nur schreibgeschützt sein muss, können Sie Folgendes verwenden (was wesentlich effizienter ist):

a = np.broadcast_to(v, s)

Der Vorteil ist, dass v kann als einzelne Zahl angegeben werden, aber auch als Array, wenn verschiedene Werte gewünscht sind (solange v.shape entspricht dem Schwanz von s ).

Bonus: wenn Sie die dtype des erstellten Arrays:

a = np.broadcast_to(np.asarray(v, dtype), s).copy()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X