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 str
joinskunnen 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.