Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印2D NumPy阵列时如何移除外括号_Python_Numpy_Printing - Fatal编程技术网

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”可能会弄乱逐行的格式。默认矩阵格式的一大优点是它可以保持列对齐。除去[]的外部集合可能不值得这样做。A
np.matrix