2017-08-22 1 views
0

Ich möchte ein leeres Array erstellen und in einer for-Schleife mehrere verschiedene Werte hinzufügen. Soll ich dafür append oder concatenate verwenden? Der Code funktioniert fast. wederElemente zum Array hinzufügen

values=np.array([[]]) 
for i in range(diff.shape[0]): 
    add=np.array([[i,j,k,fScore,costMST,1]]) 
    values=np.append([values,add]) 

sollte das Ergebnis

wie
[[0,...],[1,...],[2,...],...] 

Vielen Dank

+2

['mcve'] (https://Stackoverflow.com/help/mcve) könnte nett sein – Divakar

+0

Sie könnten ein leeres Array mit' np.empty' initialisieren und einfach in diesen Index einfügen, oder Sie könnten 'np verwenden .h/v/dstack'. –

+0

Wenn Sie eine for-Schleife verwenden, um irgendetwas in numpy zu tun, machen Sie es falsch. – gobrewers14

Antwort

2

Verwendung. np.append ist nur eine andere Möglichkeit, concatenate aufzurufen, eine, die statt einer Liste 2 Argumente benötigt. Beide sind relativ teuer und erzeugen bei jedem Aufruf ein neues Array. Außerdem ist es schwierig, den Anfangswert korrekt zu ermitteln, wie Sie wahrscheinlich herausgefunden haben.

Liste append ist der richtige Weg, um ein Array zu erstellen. Das Ergebnis wird eine Liste oder Liste von Listen sein. Diese kann am Ende in ein Array mit np.array oder einer der stack (konkatenate) Funktionen umgewandelt werden.

Versuchen:

values=[] 
for i in range(diff.shape[0]): 
    add=np.array([[i,j,k,fScore,costMST,1]]) 
    values.append(add) 
values = np.stack(values) 

Seit add 2d ist, diese Verwendung von stack eine 3d machen. Vielleicht möchten Sie stattdessen vstack (oder np.concatenate(values, axis=0) ist das gleiche).

Oder versuchen:

values=[] 
for i in range(diff.shape[0]): 
    add=[i,j,k,fScore,costMST,1] 
    values.append(add) 
values = np.array(values) 

dies macht eine Liste von Listen, die np.array in einen 2D-Array dreht.