2016-12-24 4 views
0

Ich beginne mit NumPy.NumPy stack oder append Array an Array

Gegeben zwei np.array s, queu und new_path:

queu = [ [[0 0] 
      [0 1]] 
     ] 

new_path = [ [[0 0] 
       [1 0] 
       [2 0]] 
      ] 

Mein Ziel ist die folgende queu zu erhalten:

queu = [ [[0 0] 
      [0 1]] 
     [[0 0] 
      [1 0] 
      [2 0]] 
     ] 

Ich habe versucht:

np.append(queu, new_path, 0) 

und

np.vstack((queu, new_path)) 

Aber beide heben

all the input array dimensions except for the concatenation axis must match exactly

ich nicht die NumPy Philosophie erhalten hat. Was mache ich falsch?

+0

Ihr gewünschtes Ergebnis ist keine Matrix, da eine Matrix die gleiche Anzahl von Elementen an allen Achsen haben muss (z. B. 3x2 - 3 Zeilen mit genau 2 Elementen in jeder Zeile) – sirfz

+0

Ok, ich verstehe. Ich versuche alle möglichen Wege auf einer 2D-Matrix aufzuzählen. Ich werde meinen Ansatz ändern. –

Antwort

0

Es ist nicht ganz klar zu mir, wie Sie Ihre array s eingerichtet haben, aber aus dem Klang es sollte np.vstack tatsächlich tun, was Sie sehen sind:

In [30]: queue = np.array([0, 0, 0, 1]).reshape(2, 2) 

In [31]: queue 
Out[31]: 
array([[0, 0], 
     [0, 1]]) 

In [32]: new_path = np.array([0, 0, 1, 0, 2, 0]).reshape(3, 2) 

In [33]: new_path 
Out[33]: 
array([[0, 0], 
     [1, 0], 
     [2, 0]]) 

In [35]: np.vstack((queue, new_path)) 
Out[35]: 
array([[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]) 
1

, was Sie brauchen, ist np.hstack

In [73]: queu = np.array([[[0, 0], 
          [0, 1]] 
         ]) 
In [74]: queu.shape 
Out[74]: (1, 2, 2) 

In [75]: new_path = np.array([ [[0, 0], 
           [1, 0], 
           [2, 0]] 
          ]) 

In [76]: new_path.shape 
Out[76]: (1, 3, 2) 

In [81]: np.hstack((queu, new_path)) 
Out[81]: 
array([[[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]]) 
1
In [741]: queu = np.array([[[0,0],[0,1]]]) 
In [742]: new_path = np.array([[[0,0],[1,0],[2,0]]]) 
In [743]: queu 
Out[743]: 
array([[[0, 0], 
     [0, 1]]]) 
In [744]: queu.shape 
Out[744]: (1, 2, 2) 
In [745]: new_path 
Out[745]: 
array([[[0, 0], 
     [1, 0], 
     [2, 0]]]) 
In [746]: new_path.shape 
Out[746]: (1, 3, 2) 

Sie haben 2-Arrays definiert ist, mit Form (1,2,2) und (1,3,2). Wenn Sie über diese Formen verwirrt sind, müssen Sie einige der grundlegenden numpy Einführung erneut lesen.

hstack, vstack und append all Anruf concatenate. Mit 3D-Arrays, die sie verwenden, verwirrt nur die Dinge.

Das Zusammenfügen auf der 2. Achse, die Größe 2 für eins und 3 für das andere, funktioniert und erzeugt ein (1,5,2) -Array. (Dies ist äquivalent zu hstack)

In [747]: np.concatenate((queu, new_path),axis=1) 
Out[747]: 
array([[[0, 0], 
     [0, 1], 
     [0, 0], 
     [1, 0], 
     [2, 0]]]) 

Der Versuch, auf der Achse zu verbinden 0 (vstack) produziert den Fehler:

In [748]: np.concatenate((queu, new_path),axis=0) 
.... 
ValueError: all the input array dimensions except for the concatenation axis must match exactly 

Die Verkettung Achse ist 0, aber Dimensionen der Achse 1 unterscheiden. Daher der Fehler.

Ihr Ziel ist kein gültiges Numy-Array. Sie könnten sie zusammen in einer Liste sammeln:

In [759]: alist=[queu[0], new_path[0]] 
In [760]: alist 
Out[760]: 
[array([[0, 0], 
     [0, 1]]), 
array([[0, 0], 
     [1, 0], 
     [2, 0]])] 

oder ein Objekt dtype Array - aber das ist weiter fortgeschritten numpy.