Machen Sie eine Matrix Quadrat und padding es mit dem gewünschten Wert in numpy

Im allgemeinen könnten wir Matrizen beliebiger Größen haben. Für meine Anwendung ist es notwendig, quadratische Matrix zu haben. Auch die Dummy-Einträge sollten einen bestimmten Wert haben. Ich frage mich, ob es irgendwie in numpy gebaut?

Oder die einfachste Art, es zu tun

EDIT:

Die Matrix X ist schon da und es ist nicht quadriert. Wir wollen den Wert platzieren, um ihn quadratisch zu machen. Padiere es mit dem Dummy-Wert. Alle ursprünglichen Werte bleiben gleich.

Danke vielmals

2 Solutions collect form web for “Machen Sie eine Matrix Quadrat und padding es mit dem gewünschten Wert in numpy”

Seit Numpy 1.7 gibt es die numpy.pad Funktion. Hier ist ein Beispiel:

 >>> x = np.random.rand(2,3) >>> np.pad(x, ((0,1), (0,0)), mode='constant', constant_values=42) array([[ 0.20687158, 0.21241617, 0.91913572], [ 0.35815412, 0.08503839, 0.51852029], [ 42. , 42. , 42. ]]) 

Für ein 2D-Numpy-Array m es einfach, dies zu tun, indem man ein max(m.shape) x max(m.shape) Array von p und dieses mit dem gewünschten Padding-Wert multipliziert, bevor man die Scheibe von p entsprechend m ( p[0:m.shape[0], 0:m.shape[1]] ) gleich m .

Dies führt zu der folgenden Funktion, wobei die erste Zeile die Möglichkeit beinhaltet, dass die Eingabe nur eine Dimension hat (dh ein Array statt einer Matrix):

 import numpy as np def pad_to_square(a, pad_value=0): m = a.reshape((a.shape[0], -1)) padded = pad_value * np.ones(2 * [max(m.shape)], dtype=m.dtype) padded[0:m.shape[0], 0:m.shape[1]] = m return padded 

So zum Beispiel:

 >>> r1 = np.random.rand(3, 5) >>> r1 array([[ 0.85950957, 0.92468279, 0.93643261, 0.82723889, 0.54501699], [ 0.05921614, 0.94946809, 0.26500925, 0.02287463, 0.04511802], [ 0.99647148, 0.6926722 , 0.70148198, 0.39861487, 0.86772468]]) >>> pad_to_square(r1, 3) array([[ 0.85950957, 0.92468279, 0.93643261, 0.82723889, 0.54501699], [ 0.05921614, 0.94946809, 0.26500925, 0.02287463, 0.04511802], [ 0.99647148, 0.6926722 , 0.70148198, 0.39861487, 0.86772468], [ 3. , 3. , 3. , 3. , 3. ], [ 3. , 3. , 3. , 3. , 3. ]]) 

oder

 >>> r2=np.random.rand(4) >>> r2 array([ 0.10307689, 0.83912888, 0.13105124, 0.09897586]) >>> pad_to_square(r2, 0) array([[ 0.10307689, 0. , 0. , 0. ], [ 0.83912888, 0. , 0. , 0. ], [ 0.13105124, 0. , 0. , 0. ], [ 0.09897586, 0. , 0. , 0. ]]) 

etc.

  • Speichern von Arrays als Spalten mit np.savetxt
  • Matplotlib 1.3.1: Plot (Matrix ("1,2,3")) -> RuntimeError: maximale Rekursionstiefe überschritten
  • Gotchas wo Numpy unterscheidet sich von gerade Python?
  • Kann ich ein gemeinsames Multiarray oder Listen von Listen-Objekt in Python für Multiprocessing erstellen?
  • NumPy: mit loadtxt oder genfromtxt, um eine zerlumpte Struktur zu lesen
  • Verknüpfen Arrays in Python wie Matlab ohne zu wissen, die Größe der Ausgabe-Array
  • Warum der Leistungsunterschied zwischen numpy.zeros und numpy.zeros_like?
  • Wie finde ich den Abstand zwischen 2 Punkten in 2 verschiedenen Dataframes in Pandas?
  • Mit numpy, um eine Reihe von allen Kombinationen von zwei Arrays zu bauen
  • Schneller Weg, um Gruppe mit Mittelwert in Pandas zu verwandeln
  • Geschichtete Probenahme in numpy
  • Python ist die beste Programmiersprache der Welt.