Is there any elegant way to exploit the correct spacing feature of print numpy.array to get a 2D array, with proper labels, that aligns properly? For example, given an array with 4 rows and 5 columns, how can I provide the array and appropriately sized lists corresponding to the row and header columns to generate some output that looks like this?
A B C D E
Z [[ 85 86 87 88 89]
Y [ 90 191 192 93 94]
X [ 95 96 97 98 99]
W [100 101 102 103 104]]
If I naively try:
import numpy
x = numpy.array([[85, 86, 87, 88, 89], \
[90, 191, 192, 93, 94], \
[95, 96, 97, 98, 99], \
[100,101,102,103,104]])
row_labels = ['Z', 'Y', 'X', 'W']
print " A B C D E"
for row, row_index in enumerate(x):
print row_labels[row_index], row
I get:
A B C D E
Z [85 86 87 88 89]
Y [90 191 192 93 94]
X [95 96 97 98 99]
W [100 101 102 103 104]
Is there any way i can get things to line up intelligently? I am definitely open to using any other library if there is a better way to solve my problem.
解决方案
Assuming all matrix numbers have at most 3 digits, you could replace the last part with this:
print " A B C D E"
for row_label, row in zip(row_labels, x):
print '%s [%s]' % (row_label, ' '.join('%03s' % i for i in row))
Which outputs:
A B C D E
Z [ 85 86 87 88 89]
Y [ 90 191 192 93 94]
X [ 95 96 97 98 99]
W [100 101 102 103 104]
Formatting with '%03s' results in a string of length 3 with left padding (using spaces). Use '%04s' for length 4 and so on. The full format string syntax is explained in the Python documentation.