2016-11-10 4 views
0

Ich versuche folgendes:Wie behebt man Fehler beim Verketten zweier numpy Arrays?

rands = np.empty((0, 10)) 
rand = np.random.normal(1, 0.1, 10) 
rands = np.concatenate((rands,rand),axis=0) 

, die mir die folgende Störung gibt:

ValueError: all the input arrays must have same number of dimensions 

Aber warum ist dieser Fehler? Warum kann ich mit diesem Befehl keine neue Zeile rand in die Matrix rands einfügen?

Bemerkung:

Ich kann 'fix' dies, indem Sie den folgenden Befehl:

rands = np.concatenate((rands,rand.reshape(1, 10)),axis=0) 

aber es nicht mehr sieht Pythonic, aber lästig, ...

Vielleicht gibt es eine bessere Lösung mit weniger Klammern und Umformungen ...?

+0

Nun obwohl 'rands' hat zunächst ein leeres Zeile ist es noch 2-dimensional die Form ist '(0,10)', weshalb es Borken – EdChum

+0

Ja, und eine Zeile ist eindimensional mit 10 Elementen. Ich verstehe nicht, was das Problem hier ist ... – Alex

+0

Nicht in den Augen numpy ist es nicht Sie würden immer noch den gleichen Fehler mit 'rands = np.empty ((1, 10))' – EdChum

Antwort

3

rands hat Form (0, 10) und rand hat Form (10,).

In [19]: rands.shape 
Out[19]: (0, 10) 

In [20]: rand.shape 
Out[20]: (10,) 

Wenn Sie versuchen, entlang der 0-Achse, dann die 0-Achse von rands (der Länge 0) verkettet mit der 0-Achse von rand (Länge 10) verketten. Bildlich, sieht es wie folgt aus:

rands:

| | | | | | | | | | | 

rand:

| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 
| | 

Die beiden Formen zusammen passen nicht gut, da die 1-Achse rands Länge 10 und rand fehlt eine 1-Achse.

das Problem zu beheben, Sie rand zu einem 2D-Array von Form (1, 10) fördern könnten:

In [21]: rand[None,:].shape 
Out[21]: (1, 10) 

Damit die 10 Elemente in rand sind jetzt gelegt entlang der 1-Achse. Dann

rands = np.concatenate((rands,rand[None,:]), axis=0) 

gibt ein Array von Form (1, 10)

In [26]: np.concatenate((rands,rand[None,:]),axis=0).shape 
Out[26]: (1, 10) 

Alternativ Sie row_stack ohne Förderung rand zu einem 2D-Array verwenden:

In [28]: np.row_stack((rands,rand)).shape 
Out[28]: (1, 10) 
+0

Ich mag row_stack. Und jetzt sieht es pythonischer aus. Danke! – Alex

Verwandte Themen