2013-07-25 24 views
11

devo stampare il codice Python in un array 5x5 matrice dovrebbe essere simile a questo:stampa di una matrice bidimensionale in python

0 1 4 (infinity) 3 
1 0 2 (infinity) 4 
4 2 0 1   5 
(inf)(inf) 1 0 3 
3 4 5 3  0 

qualcuno può aiutarmi stampare questo tavolo? usando gli indici.

for k in range(n): 
     for i in range(n): 
      for j in range(n): 
       if A[i][k]+A[k][j]<A[i][j]: 
        A[i][j]=A[i][k]+A[k][j] 
+0

Stai volutamente utilizzando 'j' come incrementare variabile in due cicli annidati? – Kudzu

+0

Qual è la formula matematica che governa il valore di ciascun elemento nell'array? – inspectorG4dget

+1

grazie per aver colto il mio errore. Intendevo usare "i" – user2548833

risposta

1

Ho usato numpy per generare l'array, ma l'elenco di array di elenchi dovrebbe funzionare in modo simile.

import numpy as np 
def printArray(args): 
    print "\t".join(args) 

n = 10 

Array = np.zeros(shape=(n,n)).astype('int') 

for row in Array: 
    printArray([str(x) for x in row]) 

Se si desidera stampare solo alcuni indici:

import numpy as np 
def printArray(args): 
    print "\t".join(args) 

n = 10 

Array = np.zeros(shape=(n,n)).astype('int') 

i_indices = [1,2,3] 
j_indices = [2,3,4] 

for i in i_indices:printArray([str(Array[i][j]) for j in j_indices]) 
+0

c'è un modo per usare gli indici? – user2548833

+0

Non sono sicuro che questa sia la soluzione migliore per questo particolare problema (dal momento che non si occupa specificamente della struttura dell'array), ma si potrebbe anche fare qualcosa del tipo: 'def print_join (* args): print" \ t ".join (str (arg) per arg in args)'. Quindi si ridimensiona a un numero qualsiasi di argomenti, anziché essere corretto in 5. – Marius

+0

@Marius O: buon punto. – sihrc

32

Una combinazione di list comprehensions e str joins può fare il lavoro:

inf = float('inf') 
A = [[0,1,4,inf,3], 
    [1,0,2,inf,4], 
    [4,2,0,1,5], 
    [inf,inf,1,0,3], 
    [3,4,5,3,0]] 

print('\n'.join([''.join(['{:4}'.format(item) for item in row]) 
     for row in A])) 

rendimenti

0 1 4 inf 3 
    1 0 2 inf 4 
    4 2 0 1 5 
inf inf 1 0 3 
    3 4 5 3 0 

L'uso di for-loops con gli indici è solitamente evitabile in Python e non è considerato "Pythonic" perché è meno leggibile rispetto al suo cugino Pythonic (vedi sotto). Tuttavia, si potrebbe fare questo:

for i in range(n): 
    for j in range(n): 
     print '{:4}'.format(A[i][j]), 
    print 

Più Pythonic cugino sarebbe:

for row in A: 
    for val in row: 
     print '{:4}'.format(val), 
    print 

Tuttavia, questo utilizza 30 dichiarazioni di stampa, mentre la mia risposta originale utilizza uno solo.

+0

Devo essere in grado di utilizzare il ciclo for indicato. Qualcuno sa come fare questo? Voglio incorporare i loop più grandi in un programma su cui sto lavorando, ma voglio usare gli indici. – user2548833

0

utilizzando indici, per cicli e formattazione:

import numpy as np 

def printMatrix(a): 
    print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" 
    rows = a.shape[0] 
    cols = a.shape[1] 
    for i in range(0,rows): 
     for j in range(0,cols): 
     print "%6.f" %a[i,j], 
     print 
    print  


def printMatrixE(a): 
    print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" 
    rows = a.shape[0] 
    cols = a.shape[1] 
    for i in range(0,rows): 
     for j in range(0,cols): 
     print("%6.3f" %a[i,j]), 
     print 
    print  


inf = float('inf') 
A = np.array([[0,1.,4.,inf,3], 
    [1,0,2,inf,4], 
    [4,2,0,1,5], 
    [inf,inf,1,0,3], 
    [3,4,5,3,0]]) 

printMatrix(A)  
printMatrixE(A)  

che produce l'uscita:

Matrix[5][5] 
    0  1  4 inf  3 
    1  0  2 inf  4 
    4  2  0  1  5 
    inf inf  1  0  3 
    3  4  5  3  0 

Matrix[5][5] 
0.000 1.000 4.000 inf 3.000 
1.000 0.000 2.000 inf 4.000 
4.000 2.000 0.000 1.000 5.000 
    inf inf 1.000 0.000 3.000 
3.000 4.000 5.000 3.000 0.000 
17

c'è sempre il modo più semplice.

import numpy as np 
print(np.matrix(A)) 
+1

Sembra una soluzione ripetuta in alcuni dei tuoi messaggi – Ian

+1

di gran lunga la migliore risposta, non reinventiamo la ruota –

+3

una matrice non è una ruota – Flint

0
print(mat.__str__()) 

dove tappetino è riferendosi variabile per l'oggetto matrice

Problemi correlati