我有以下代码:
import numpy as np
from numpy import matrix
MM = matrix([[1.00,0,0],[0,1.50,0],[0,0,2.00]])
M = np.array(MM)
print("matrix M: \n", M)
输出如下:
matrix M:
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
这非常美观,但我希望它看起来更有条理。希望是这样的:
[1. 0. 0.]
[0. 1.5 0.]
[0. 0. 2.]
答案 0 :(得分:2)
如果您自己打印M
,它实际上看起来像您期望的那样。
第一行混乱的原因是因为print
默认在其参数之间插入一个空格。您可以通过提供sep=''
来抑制这种情况。
请参阅https://docs.python.org/3/library/functions.html#print以供参考。
或者更好的是,从第一个打印参数中省略\n
,而改用sep='\n'
:
>>> print("matrix M:", M, sep='\n')
matrix M:
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
答案 1 :(得分:0)
非常接近:
'\n'.join('[{}]'.format(' '.join(str(n) for n in row)) for row in M)
输出
[1.0 0.0 0.0]
[0.0 1.5 0.0]
[0.0 0.0 2.0]
这将删除缩进和双方括号。
但是,对于非常大的矩阵,由于嵌套的for
循环,这可能会变慢。
答案 2 :(得分:0)
确切的期望输出是这样:
print('\n'.join('[{}]'.format('. '.join(str(float(n)) for n in row)) for row in M))
[1.0. 0.0. 0.0]
[0.0. 1.5. 0.0]
[0.0. 0.0. 2.0]
答案 3 :(得分:0)
如此处Pretty print 2D Python list 所述,以下是一个非常不错的选择:
s = [[str(e) for e in row] for row in M]
lens = [max(map(len, col)) for col in zip(*s)]
fmt = '\t'.join('{{:{}}}'.format(x) for x in lens)
table = [fmt.format(*row) for row in s]
print('\n'.join(table))
1.0 0.0 0.0
0.0 1.5 0.0
0.0 0.0 2.0
答案 4 :(得分:0)
根据这里要为解决方案增加多少代码/复杂度,您可以做一些事情。如果您确实想要对输出进行细粒度的控制(使用其他一些建议的解决方案中提供的代码),则可以在print
语句中使用自定义函数,但是这种方法不那么麻烦,但仍然给您带来体面的体验灵活性是使用Numpy中已经包含的array2string函数。
一些使用您的方案的示例:
>>> print(np.array2string(a=M))
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
separator
参数在元素周围添加一些填充:>>> print(np.array2string(a=M, separator=' '))
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
print
语句(array2string
并没有办法改变它)本身做进一步的说明,请进行一些操作去除括号后的字符间距:>>> print(' ' + np.array2string(a=M, separator=' ')[1:-1])
[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]
请注意,最后一种情况在每行的开头仍留有空格。您可以使用正则表达式进行清理。
我意识到,这可能并不是您真正想要的输出,但是我想我可能会提供一种重量更轻的替代品,使您基本上能达到目标。