een tweedimensionale array afdrukken in python

Ik moet deze python-code afdrukken in een 5×5-array, de array zou er als volgt uit moeten zien:

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

kan iemand mij helpen deze tabel af te drukken? met behulp van indices.

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]

Antwoord 1, autoriteit 100%

Een combinatie van lijstbegrippenen strjoinskunnen het werk doen:

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

opbrengst

  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

Het gebruik van for-loopsmet indices is meestal te vermijden in Python en wordt niet als “Pythonic” beschouwd omdat het minder leesbaar is dan zijn Pythonic-neef (zie hieronder). U kunt echter dit doen:

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

De meer Pythonische neef zou zijn:

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

Dit gebruikt echter 30 printstatements, terwijl mijn oorspronkelijke antwoord er maar één gebruikt.


Antwoord 2, autoriteit 89%

Er is altijd een gemakkelijke manier.

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

Antwoord 3, autoriteit 2%

Ik heb numpy gebruikt om de array te genereren, maar de lijst met lijsten-array zou op dezelfde manier moeten werken.

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

Als u alleen bepaalde indices wilt afdrukken:

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

Antwoord 4, autoriteit 2%

print(mat.__str__())

waarbij mat een variabele is die verwijst naar uw matrixobject


Antwoord 5, autoriteit 2%

for i in A:
    print('\t'.join(map(str, i)))

Antwoord 6

indices, for-loops en opmaak gebruiken:

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)    

wat de output oplevert:

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

Antwoord 7

Naast het eenvoudige afdrukantwoord, kunt u de afdrukuitvoer daadwerkelijk aanpassen door het gebruik van de numpy.set_printoptionsfunctie.

Vereisten:

>>> import numpy as np
>>> inf = np.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]])

De volgende optie:

>>> np.set_printoptions(infstr="(infinity)")

Resulteert in:

>>> print(A)
[[        0.         1.         4. (infinity)         3.]
 [        1.         0.         2. (infinity)         4.]
 [        4.         2.         0.         1.         5.]
 [(infinity) (infinity)         1.         0.         3.]
 [        3.         4.         5.         3.         0.]]

De volgende optie:

>>> np.set_printoptions(formatter={'float': "\t{: 0.0f}\t".format})

Resultaten in:

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

Als u gewoon een specifieke string-uitvoer wilt hebben voor een specifieke array, de functie numpy.array2string is ook beschikbaar.

Other episodes