web-dev-qa-db-fra.com

Comment entrer une matrice (liste 2D) dans Python 3.4?

Je suis nouveau sur Python 3.4 et j'utilise habituellement MATLAB/GNU Octave pour le calcul matriciel. Je sais que nous pouvons effectuer un calcul matriciel avec numpy dans Python 2.x, mais numpy ne fonctionne pas pour Python 3.4.

J'ai essayé de créer ce code pour saisir une matrice m par n. J'avais l'intention d'entrer [[1,2,3],[4,5,6]] mais le code produit [[4,5,6],[4,5,6]. Les mêmes choses se produisent lorsque je saisis une autre matrice m par n, le code produit une matrice de m par n dont les lignes sont identiques. 

Peut-être que vous pouvez m'aider à trouver ce qui ne va pas avec mon code.

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

Le problème est sur l'étape d'initialisation.

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

Ce code fait en réalité que chaque ligne de votre matrix se réfère au même objet columns. Si l'un des éléments d'une colonne change, toutes les colonnes changent:

>>> 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]]

Vous pouvez initialiser votre matrice dans une boucle imbriquée, comme ceci:

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

ou, dans une ligne en utilisant la compréhension par liste:

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

ou:

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

Voir également:

J'espère que cela pourra aider.

11
alecxe

vous pouvez accepter une liste 2D en python de cette façon ...

simplement

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


pour les personnages

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)

ou

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

pour les nombres

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)

où n est le nombre d'éléments dans les colonnes, alors que m est le nombre d'éléments dans une ligne.

De façon pythonique, cela va créer une liste de liste

5
Ani

Outre la réponse acceptée, vous pouvez également initialiser vos lignes de la manière suivante: matrix[i] = [0]*n

Par conséquent, le code suivant fonctionnera - 

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

Ce code prend le nombre de lignes et de colonnes de l'utilisateur, puis les éléments et les affiche sous forme de matrice.

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
Milen John Thomas

Créer une matrice avec des nombres préremplis peut être fait avec une compréhension de liste. C'est peut-être difficile à lire, mais le travail est fait:

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)]

avec 2 rangées et 3 colonnes la matrice sera [[1, 2, 3], [4, 5, 6]], avec 3 rangées et la matrice 2 colonnes sera [[1, 2], [3, 4], [ 5, 6]] etc.

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)

Entrée: 1 2 3 4 5 6 7 8 9

Sortie: [['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)

contribution

2 3
1 2 3
4 5 6

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

0
Sitabja Pal
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)

Sortie:

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]

Remarque: ce code en cas de control.it ne contrôle que no. De rangées mais nous pouvons entrer n'importe quel nombre de colonne que nous voulons i.e row[0]=2 alors soyez prudent. Ce n'est pas le code où vous pouvez contrôler le nombre de colonnes.

0
kundan pandey

m, n = carte (int, entrée (). split ()) # m - nombre de lignes; n - nombre de colonnes;

matrice = [[int (j) pour j en entrée (). split () [: n]] pour i dans la plage (m)]

pour i dans la matrice: print (i)

0
Max Amiri

Si votre matrice est donnée comme ci-dessous, où la taille est s * s, 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

alors vous pouvez utiliser ceci

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

votre matrice sera 'arr'

0
Abhishek Yadav