2016-04-15 5 views
1

I eine numpy Matrix haben:Python: numpy.matrix.resize Elemente bewegt

[[ 0. 0.2 0. ] 
[ 0. 0. 0.2] 
[ 0. 0. 0. ]] 

wenn ich es matrix.resize(4, 4), die Größe eine zusätzliche Zeile und Spalte zu haben, es wird:

[[ 0. 0.2 0. 0. ] 
[ 0. 0.2 0. 0. ] 
[ 0. 0. 0. 0. ] 
[ 0. 0. 0. 0. ]] 

The Element in der zweiten Zeile wird um eins nach links verschoben. Es scheint, dass alle Elemente verschoben werden, und 0. werden unten hinzugefügt.

Ich würde erwarten, dass die Matrix werden:

[[ 0. 0.2 0. 0. ] 
[ 0. 0. 0.2 0. ] 
[ 0. 0. 0. 0. ] 
[ 0. 0. 0. 0. ]] 

Wie kann ich dieses Problem beheben?

Beachten Sie, dass ich dies für viele verschiedene Matrizen mit vielen verschiedenen Werten mache. Also suche ich nach einer einfachen Lösung, die für jede Größenmatrix funktioniert, obwohl die hinzugefügte Spalte und Zeile alle Nullen enthalten sollte.

Danke!

Antwort

4

Sie könnten np.pad pad das Array verwenden:

import numpy as np 

arr = np.array([[ 0., 0.2, 0. ], 
       [ 0., 0., 0.2], 
       [ 0., 0., 0. ]]) 
np.pad(arr, pad_width=([0,1], [0,1]), mode='constant') 

ergibt

array([[ 0. , 0.2, 0. , 0. ], 
     [ 0. , 0. , 0.2, 0. ], 
     [ 0. , 0. , 0. , 0. ], 
     [ 0. , 0. , 0. , 0. ]]) 

pad_width=([0,1], [0,1])np.pad

  • Null Reihen über
  • eine Zeile auf der hinzufügen erzählt unten
  • Null Spalten auf der linken
  • eine Spalte auf der rechten

mode='constant' verwendet 0 als Standardwert konstant Pad. Es gibt viele andere Modi, wie "reflect", "linear_ramp", "Kante", "Konstante", "Minimum", "wrap", "symmetrisch", "Median", "Maximum", "Mittel" .

+0

Danke, das hat super funktioniert! –

1

np.pad macht den Job:

import numpy as np 

a = np.array([[1, 2], [3, 4]]) 
print a 

b=np.pad(a, ((0,2),(0,1)), mode='constant', constant_values=0) 
print b 
Verwandte Themen