Python 打印2D NumPy阵列时如何移除外括号
我有以下代码:Python 打印2D NumPy阵列时如何移除外括号,python,numpy,printing,Python,Numpy,Printing,我有以下代码: 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
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.]
如果您单独打印
M
,它实际上看起来与您期望的一样
第一行出错的原因是默认情况下,print
在其参数之间插入空格。您可以通过提供sep=''
来抑制这种情况
请参阅以供参考
或者更好的方法是,从第一个print参数中省略\n
,并使用sep='\n'
:
>>> print("matrix M:", M, sep='\n')
matrix M:
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
如果您单独打印
M
,它实际上看起来与您期望的一样
第一行出错的原因是默认情况下,print
在其参数之间插入空格。您可以通过提供sep=''
来抑制这种情况
请参阅以供参考
或者更好的方法是,从第一个print参数中省略\n
,并使用sep='\n'
:
>>> print("matrix M:", M, sep='\n')
matrix M:
[[1. 0. 0. ]
[0. 1.5 0. ]
[0. 0. 2. ]]
非常接近:
'\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
循环,这可能会很慢。非常接近:
'\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
循环,这可能会很慢。确切的所需输出如下:
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]
准确的期望输出如下:
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]
如本文所述,下面是一个非常好的选项:
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
如本文所述,下面是一个非常好的选项:
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
根据您想要解决方案的额外代码/复杂性,您可以做一些事情。如果您真的想要对输出进行细粒度的控制(使用其他一些建议的解决方案中提供的代码),那么可以在
print
语句中使用自定义函数,但是一种不太麻烦的方法仍然可以给您提供相当大的灵活性,那就是使用Numpy中已经包含的函数
使用您的场景的几个示例:
- 没有任何论据:
- 使用
参数在元素周围添加一点填充:分隔符
- 如果前导括号和尾随括号比较麻烦,您可以进一步使用
语句(print
没有提供更改的方法)本身,执行一些操作以说明删除括号后的字符间距:array2string
我意识到,就输出而言,这可能并不完全是您想要的,但我想我可能会提供一个更轻的替代方案,让您大部分时间都能做到这一点。根据您想要解决方案的额外代码/复杂度,您可以做一些事情。如果您真的想要对输出进行细粒度的控制(使用其他一些建议的解决方案中提供的代码),那么可以在
print
语句中使用自定义函数,但是一种不太麻烦的方法仍然可以给您提供相当大的灵活性,那就是使用Numpy中已经包含的函数
使用您的场景的几个示例:
- 没有任何论据:
- 使用
参数在元素周围添加一点填充:分隔符
- 如果前导括号和尾随括号比较麻烦,您可以进一步使用
语句(print
没有提供更改的方法)本身,执行一些操作以说明删除括号后的字符间距:array2string
我意识到,就输出而言,这可能不是您想要的,但我想我可能会提供一个更轻的替代方案,让您大部分时间都能做到这一点。您可以创建一个自定义的“to_string()”方法。遗憾的是,python以这种方式打印n维数组……您可以使用
print(“矩阵M:\n”,M,sep=”)修复输出中第一行M
的对齐方式。但是你仍然会有外部的方括号。@WarrenWeckesser是的,但它不会像OP Wantsa那样删除双方括号。读完答案后,我现在不确定是否应该编辑标题。你的确切问题是什么?如何卸下支架?如何调整这些值?如何删除矩阵前的空格?我建议使用一个包含更大范围值的测试用例。例如,一行中的“12.3”可能会弄乱逐行的格式。默认矩阵格式的一大优点是它可以保持列对齐。除去[]的外部集合可能不值得这样做。np.matrix
始终是2d,但其他numpy数组可能是1d或3d。您可以创建自定义的“to_string()”方法。遗憾的是,python以这种方式打印n维数组……您可以使用print(“矩阵M:\n”,M,sep=”)修复输出中第一行M
的对齐方式。但是你仍然会有外部的方括号。@WarrenWeckesser是的,但它不会像OP Wantsa那样删除双方括号。读完答案后,我现在不确定是否应该编辑标题。你的确切问题是什么?如何卸下支架?如何调整这些值?如何删除矩阵前的空格?我建议使用一个包含更大范围值的测试用例。例如,一行中的“12.3”可能会弄乱逐行的格式。默认矩阵格式的一大优点是它可以保持列对齐。除去[]的外部集合可能不值得这样做。Anp.matrix