2010-06-08 6 views
2

Je suis très nouveau en Python, j'ai besoin de lire les nombres d'un fichier et de les stocker dans une matrice comme je le ferais dans fortran ou C;Matrice en python

for i 
    for j 
    data[i][j][0]=read(0) 
    data[i][j][1]=read(1) 
    data[i][j][2]=read(2) 
... 
... 

Comment puis-je faire la même chose en Python? Je lis un peu, mais me suis embrouillé avec tuples et choses semblables

Si vous pouviez me montrer un exemple similaire, il serait grand

grâce

Répondre

4

Python ne vient pas avec des tableaux multidimensionnels, mais vous pouvez les ajouter à travers la pop ular numpy Paquet tiers. Si vous voulez éviter les paquets tiers, ce que vous feriez en Python serait d'utiliser une liste de listes de listes (chaque "liste" étant une séquence "vectorielle" en 1D, qui peut contenir des éléments de n'importe quel type).

Par exemple:

data = [ [ [0 for i in range(4)] for j in range(5)] for k in range(6)] 

cela fait une liste de 6 articles qui sont des listes de 5 articles qui sont des listes de 4 0 de - à savoir un 6 x 5 x 4 « matrice 3D » que vous pourriez puis répondre à la façon dont vous voulez,

for i in range(6): 
    for j in range(5): 
    data[i][j][0]=read(0) 
    data[i][j][1]=read(1) 
    data[i][j][2]=read(2) 

pour initialiser les trois premiers des quatre éléments de chaque sous-liste plus imbriquée avec des appels à cette fonction mystérieuse read qui sans doute que vous voulez écrire vous-même (je ne sais pas ce qu'il est censé faire - pas "lire et retourner le numéro suivant" puisque je t prend un argument mystérieux, mais, alors quoi?).

+4

au lieu de [0 pour i dans la plage (n)] il faut utiliser [0] * n – unbeli

+3

@unbeli, s/devrait/pourrait/- '[0] * n' est plus rapide mais introduit une asymétrie qui pourrait se révéler extrêmement déroutant pour un débutant et les inciter à utiliser une telle réplication ailleurs (sur n'importe quelle couche, mais la plus profonde), ce qui serait un désastre total. J'ai choisi l'approche plus régulière et parfaitement symétrique très délibérément, croyez-moi - l'économie ponctuelle de quelques microsecondes à l'initialisation de la matrice ne vaut pas la peine d'ajouter à la désorientation d'un novice ;-). –

0

Un exemple simple serait:

data = [] 
with open(_filename_, 'r') as f: 
    for line in f: 
     data.append([int(x) for x in line.split()]) 
0

deux structures sont Matrices dimensions. En langage Python, la représentation la plus naturelle d'une matrice est une liste de listes.

Ainsi, vous pouvez écrire une matrice de ligne comme:

[[1, 2, 3, 4]] 

Et écrire une matrice de colonne:

[[1], 
[2], 
[3], 
[4]] 

Cela va bien à MXN matrices ainsi:

[[10, 20], 
[30, 40], 
[50, 60]] 

Voir matfunc.py pour un exemple de la façon de développer af paquet de matrice d'Ull en Python pur. La documentation correspondante est here.

Et voici un exemple travaillé à de faire la multiplication de la matrice en python ordinaire à l'aide d'une liste-des-listes de représentation:

>>> from pprint import pprint 
>>> def mmul(A, B): 
     nr_a, nc_a = len(A), len(A[0]) 
     nr_b, nc_b = len(B), len(B[0]) 
     if nc_a != nr_b: 
      raise ValueError('Mismatched rows and columns') 
     return [[sum(A[i][k] * B[k][j] for k in range(nc_a)) 
       for j in range(nc_b)] for i in range(nr_a)] 

>>> A = [[1, 2, 3, 4]] 
>>> B = [[1], 
     [2], 
     [3], 
     [4]] 

>>> pprint(mmul(A, B)) 
[[30]] 

>>> pprint(mmul(B, A), width=20) 
[[1, 2, 3, 4], 
[2, 4, 6, 8], 
[3, 6, 9, 12], 
[4, 8, 12, 16]] 

Comme autre répondant a mentionné, si vous obtenez un travail sérieux à faire de la matrice, il Vous devrez installer numpy qui prend en charge directement de nombreuses opérations matricielles:

0

Une manière d'étendre la liste sous une forme pour qu'elle fonctionne comme une matrice. J'ai parcouru d'autres codes de la matrice en python, tous utilisent des compréhensions pour d'abord initialiser une liste de taille requise puis mettre à jour les valeurs (ce qui prend un peu plus de temps). Soit le r représente la ligne et c pour la colonne
.

r = input('Enter row size: ') c = input('Enter column size: ') m = [] for i in range(r): m.append([]) for j in range(c): m[i].append(input()) for i in m: print i

Ici, vous pouvez saisir les éléments de la matrice comme il était en « C » ou langues équivalentes. J'espère que cela aidera quelqu'un à avoir une vision différente de la mise en œuvre des matrices.

Questions connexes