web-dev-qa-db-ger.com

Wie kann man eine Matrix (2D-Liste) in Python 3.4 eingeben?

Ich bin neu in Python 3.4 und verwende normalerweise MATLAB/GNU Octave zur Matrixberechnung. Ich weiß, dass wir in Python 2.x eine Matrixberechnung mit Numpy durchführen können, aber für Python 3.4 funktioniert Numpy nicht.

Ich habe versucht, diesen Code zu erstellen, um eine m mal n Matrix einzugeben. Ich wollte [[1,2,3],[4,5,6]] eingeben, aber der Code ergibt [[4,5,6],[4,5,6]. Das Gleiche passiert, wenn ich eine andere m mal n Matrix eingebe. Der Code ergibt eine m mal n Matrix, deren Zeilen identisch sind. 

Vielleicht können Sie mir helfen zu finden, was mit meinem Code falsch ist.

m = int(input('number of rows, m = '))
n = int(input('number of columns, n = '))
matrix = []; columns = []
# initialize the number of rows
for i in range(0,m):
  matrix += [0]
# initialize the number of columns
for j in range (0,n):
  columns += [0]
# initialize the matrix
for i in range (0,m):
  matrix[i] = columns
for i in range (0,m):
  for j in range (0,n):
    print ('entry in row: ',i+1,' column: ',j+1)
    matrix[i][j] = int(input())
print (matrix)
8
Iqazra

Das Problem liegt im Initialisierungsschritt.

for i in range (0,m):
  matrix[i] = columns

Dieser Code bewirkt, dass jede Zeile Ihrer matrix auf dasselbe columns-Objekt verweist. Wenn sich ein Element in einer Spalte ändert, ändert sich jede andere Spalte:

>>> for i in range (0,m):
...     matrix[i] = columns
... 
>>> matrix
[[0, 0, 0], [0, 0, 0]]
>>> matrix[1][1] = 2
>>> matrix
[[0, 2, 0], [0, 2, 0]]

Sie können Ihre Matrix wie folgt in einer verschachtelten Schleife initialisieren:

matrix = []
for i in range(0,m):
    matrix.append([])
    for j in range(0,n):
        matrix[i].append(0)

oder in einem Einzeiler durch Listenverständnis:

matrix = [[0 for j in range(n)] for i in range(m)]

oder:

matrix = [x[:] for x in [[0]*n]*m]

Siehe auch:

Hoffentlich hilft das.

11
alecxe

sie können eine 2D-Liste in Python auf diese Weise akzeptieren ...

einfach

arr2d = [[j for j in input().strip()] for i in range(n)] 
# n is no of rows


für Zeichen

n = int(input().strip())
m = int(input().strip())
a = [[0]*n for _ in range(m)]
for i in range(n):
    a[i] = list(input().strip())
print(a)

oder

n = int(input().strip())
n = int(input().strip())
a = []
for i in range(n):
    a[i].append(list(input().strip()))
print(a)

für Zahlen

n = int(input().strip())
m = int(input().strip())
a = [[0]*n for _ in range(m)]
for i in range(n):
    a[i] = [int(j) for j in input().strip().split(" ")]
print(a)

dabei steht n für keine Elemente in Spalten, während m für keine Elemente in einer Zeile steht.

Auf Pythonic-Weise wird eine Liste der Liste erstellt

5
Ani

Abgesehen von der akzeptierten Antwort können Sie Ihre Zeilen auch folgendermaßen initialisieren: matrix[i] = [0]*n

Daher wird der folgende Code funktionieren - 

m = int(input('number of rows, m = '))
n = int(input('number of columns, n = '))
matrix = []
# initialize the number of rows
for i in range(0,m):
    matrix += [0]
# initialize the matrix
for i in range (0,m):
    matrix[i] = [0]*n
for i in range (0,m):
    for j in range (0,n):
        print ('entry in row: ',i+1,' column: ',j+1)
        matrix[i][j] = int(input())
print (matrix)
2
Arik Pamnani

Dieser Code entnimmt dem Benutzer die Anzahl der Zeilen und Spalten, nimmt Elemente und zeigt sie als Matrix an.

m = int(input('number of rows, m : '))
n = int(input('number of columns, n : '))
a=[]
for i in range(1,m+1):
  b = []
  print("{0} Row".format(i))
  for j in range(1,n+1):
    b.append(int(input("{0} Column: " .format(j))))
  a.append(b)
print(a)
1

Wenn Sie n Eingabezeilen verwenden möchten, wobei jede Zeile m durch Leerzeichen getrennte Ganzzahlen enthält, wie:

1 2 3
4 5 6 
7 8 9 

Dann können Sie verwenden:

a=[] // declaration 
for i in range(0,n):   //where n is the no. of lines you want 
 a.append([int(j) for j in input().split()])  // for taking m space separated integers as input

Dann drucken Sie, was Sie für die obige Eingabe möchten:

print(a[1][1]) 

O/P wäre 5 für 0-basierte Indizierung

1
Jatin batra

Ich habe Numpy Library verwendet und es funktioniert gut für mich. Es ist nur eine Zeile und leicht zu verstehen. Die Eingabe muss in einer einzelnen Größe erfolgen, die durch ein Leerzeichen getrennt ist, und die Umformung konvertiert die Liste in die gewünschte Form. Hier (2,2) ändert die Größe der Liste von 4 Elementen in eine 2 * 2-Matrix. Achten Sie darauf, die gleiche Anzahl von Elementen in der Eingabe anzugeben, die der Dimension der Matrix entspricht.

import numpy as np
a=np.array(list(map(int,input().strip().split(' ')))).reshape(2,2)

print(a)

Eingabe

array([[1, 2],
       [3, 4]])

Ausgabe

0

Das Erstellen von Matrix mit vorab aufgefüllten Zahlen kann mit Listenverständnis erfolgen. Es kann schwer zu lesen sein, aber es wird erledigt:

rows = int(input('Number of rows: '))
cols = int(input('Number of columns: '))
matrix = [[i + cols * j for i in range(1, cols + 1)] for j in range(rows)]

mit 2 Zeilen und 3 Spalten wird die Matrix [[1, 2, 3], [4, 5, 6]] sein, mit 3 Zeilen und 2 Spalten wird die Matrix [[1, 2], [3, 4], [ 5, 6]] usw.

0
Aivar Paalberg
a = []
b = []

m=input("enter no of rows: ")
n=input("enter no of coloumns: ")

for i in range(n):
     a = []
     for j in range(m):
         a.append(input())
     b.append(a)

Eingabe: 1 2 3 4 5 6 7 8 9

Ausgabe: [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']] 

0
Deepak Kumar
row=list(map(int,input().split())) #input no. of row and column
b=[]
for i in range(0,row[0]):
    a=list(map(int,input().split()))
    b.append(a)
print(b)

Eingabe

2 3
1 2 3
4 5 6

Ausgabe [[1, 2, 3], [4, 5, 6]]

0
Sitabja Pal

Wenn die Eingabe so formatiert ist,

1 2 3
4 5 6
7 8 9

ein Einzeiler kann verwendet werden

mat = [list(map(int,input().split())) for i in range(row)]
0
Julkar9
no_of_rows = 3  # For n by n, and even works for n by m but just give no of rows
matrix = [[int(j) for j in input().split()] for i in range(n)]
print(matrix)
0
Mahesh Kumar
row=list(map(int,input().split())) #input no. of row and column
b=[]
for i in range(0,row[0]):
    print('value of i: ',i)
    a=list(map(int,input().split()))
    print(a)
    b.append(a)
print(b)
print(row)

Ausgabe:

2 3

value of i:0
1 2 4 5
[1, 2, 4, 5]
value of i:  1
2 4 5 6
[2, 4, 5, 6]
[[1, 2, 4, 5], [2, 4, 5, 6]]
[2, 3]

Hinweis: Dieser Code im Falle von control.it nur Kontrollnr. Von Zeilen können wir jedoch eine beliebige Anzahl von Spalten eingeben, d. H. row[0]=2. Seien Sie also vorsichtig. Dies ist nicht der Code, mit dem Sie keine Spalten steuern können.

0
kundan pandey

m, n = map (int, input (). split ()) # m - Anzahl der Zeilen; n - Anzahl der Spalten;

matrix = [[int (j) für j in Eingabe (). split () [: n]] für i im Bereich (m)]

für i in Matrix: drucken (i)

0
Max Amiri

Wenn Ihre Matrix zeilenweise wie unten angegeben ist, wobei size s * s ist, gilt hier s = 5 5 31 100 65 12 18 10 13 47 157 6 100 113 174 11 33 88 124 41 20 140 99 32 111 41 20

dann kannst du das benutzen

s=int(input())
b=list(map(int,input().split()))
arr=[[b[j+s*i] for j in range(s)]for i in range(s)]

ihre Matrix wird "arr" sein

0
Abhishek Yadav
a,b=[],[]
n=int(input("Provide me size of squre matrix row==column : "))
for i in range(n):
   for j in range(n):
      b.append(int(input()))
    a.append(b)
    print("Here your {} column {}".format(i+1,a))
    b=[]
for m in range(n):
    print(a[m])

funktioniert perfekt

0
ojhastar01