13 Stimmen

Wie kann ich einer Matrix eine zusätzliche Reihe und Spalte hinzufügen?

Ich muss einer vorhandenen Numpy-Array an einer definierten Position eine Spalte und eine Zeile hinzufügen.

3 Stimmen

Dies benötigt etwas mehr Informationen

2 Stimmen

Welche Art von Array? Liste von Listen, array.array oder numpy.array?

27voto

Stefan Kendall Punkte 63658

Ich gehe davon aus, dass Ihre Spalte und Zeilen einfach eine Liste von Listen sind?

D.h. haben Sie Folgendes?

L = [[1,2,3],
     [4,5,6]]

Um eine weitere Zeile hinzuzufügen, verwenden Sie die append-Methode einer Liste.

L.append([7,8,9])

ergibt

L = [[1,2,3],
     [4,5,6],
     [7,8,9]]

Um eine weitere Spalte hinzuzufügen, müssten Sie über jede Zeile iterieren. Ein einfacher Weg dies zu tun, ist mit einer List Comprehension.

L = [x + [0] for x in L]

ergibt

L = [[1,2,3,0],
     [4,5,6,0]]

0 Stimmen

Und um das in ein Array umzuwandeln, einfach array(lst) machen?

1 Stimmen

Das sollte funktionieren. Es gibt wahrscheinlich eine bessere Möglichkeit, dies mit numpy zu tun, aber Ihre ursprüngliche Frage hat dies nicht spezifiziert.

2 Stimmen

np.append nimmt ein Achse-Argument an, das die Dimension angibt, an der angehängt werden soll; daher wird die beschriebene Methode zum Hinzufügen einer neuen Spalte als nicht ratenswert angesehen, da sie nicht für numpy optimiert ist.

7voto

doug Punkte 67204

Es gibt viele Möglichkeiten, dies in numpy zu tun, aber nicht alle davon ermöglichen es Ihnen, die Zeile/Spalte an einer beliebigen Stelle im Zielarray hinzuzufügen (z.B. append erlaubt nur die Hinzufügung nach der letzten Zeile/Spalte). Wenn Sie eine einzige Methode/Funktion möchten, um entweder eine Zeile oder Spalte an einer beliebigen Position in einem Zielarray anzufügen, würde ich 'insert' verwenden:

T = NP.random.randint(0, 10, 20).reshape(5, 4)
c = NP.random.randint(0, 10, 5)
r = NP.random.randint(0, 10, 4)
# fügen Sie eine Spalte zu T vorne hinzu:
NP.insert(T, 0, c, axis=1)
# fügen Sie eine Spalte zu T am Ende hinzu:
NP.insert(T, 4, c, axis=1)
# fügen Sie eine Zeile zu T zwischen den ersten beiden Zeilen hinzu:
NP.insert(T, 2, r, axis=0)

1 Stimmen

Ich verwende Ihre Lösung nach einem Jahrzehnt und sie funktioniert perfekt für meine Bedürfnisse. Danke!

1voto

Erdem Şen Punkte 11

Ich würde vorschlagen, das sympy Matrix-Objekt zu verwenden:

a = [[ 2,   1,  180],
     [ 1,   3,  300],
     [-1,  -4,    0]]

b = [[1,0],
     [0,0],
     [0,1]]

import sympy as sp

a = sp.Matrix(a).col_insert(-2, sp.Matrix(b))
a.tolist()

Output:

[[2, 1, 0, 1, 180], 
 [1, 0, 0, 3, 300], 
 [-1, 0, 1, -4, 0]]

Und um fortzufahren mit einem Numpy-Array, können Sie np.asarray(a) anstelle von a.tolist() verwenden (vorausgesetzt, Sie haben Numpy als np importiert)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X