【问题标题】:Print `numpy.ndarray` on a single line在一行上打印 `numpy.ndarray`
【发布时间】:2017-10-23 16:24:59
【问题描述】:

在使用 scipy/numpy 时,我确实获得了存储到 numpy.ndarray 中的信息

>>> a
array([[ 0.15555605,  0.51031528,  0.84580176,  0.06722675],
       [ 0.60556045,  0.62721023, -0.48979983, -0.04152777],
       [-0.78044785,  0.58837543, -0.21146041, -0.13568023],
       [ 0.        ,  0.        ,  0.        ,  1.        ]])
>>> print(a)
[[ 0.15555605  0.51031528  0.84580176  0.06722675]
 [ 0.60556045  0.62721023 -0.48979983 -0.04152777]
 [-0.78044785  0.58837543 -0.21146041 -0.13568023]
 [ 0.          0.          0.          1.        ]]

如何将结果打印在一行上?

我已经检查过了:

>>> numpy.get_printoptions()
{'precision': 8, 'threshold': 1000, 'edgeitems': 3, 'linewidth': 75, 'suppress': False, 'nanstr': 'nan', 'infstr': 'inf', 'formatter': None}

但即使将 linewidth 设置为 1000 也不会改变这一点。有没有办法改变该类型的显示格式?

是否也可以在每个数字之间添加逗号(如数组显示但没有周围的array(...))?

【问题讨论】:

  • 如果你想把数组“原样”打印在一行,你可以试试print(a.tolist())

标签: python numpy multidimensional-array formatting


【解决方案1】:

为了将numpy.array打印成一行,您可以使用其内置函数numpy.tolist()将其转换为列表

例子:

import numpy as np

arr = np.array(((1, 2, 3), (4, 5, 6), (7, 8, 9)))

数组的简单打印:

print(arr)
[[1, 2, 3]
 [4, 5, 6]
 [7, 8, 9]]

numpy.tolist()相比:

print(array.tolist())
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

【讨论】:

  • list(arr) 做得更简洁。
  • array.tolist()list(arr) 不一样。 print(list(arr))[array([1, 2, 3]), array([4, 5, 6]), array([7, 8, 9])]
【解决方案2】:

NumPy 提供了几种自定义打印的方法,例如np.array2string

对于这个答案,我假设你有这样一个数组:

>>> import numpy as np
... arr = np.array([[ 0.15555605,  0.51031528,  0.84580176,  0.06722675],
...                 [ 0.60556045,  0.62721023, -0.48979983, -0.04152777],
...                 [-0.78044785,  0.58837543, -0.21146041, -0.13568023],
...                 [ 0.        ,  0.        ,  0.        ,  1.        ]])
  • 如果要显示所有项目,请确保将 threshold 设置为 np.inf
  • 如果你想让,作为分隔符,你可以将separator设置为','

但是它没有删除换行符的选项,只是

  • max_line_width 它给出了最内层的一行中打印的字符数。因此,当您设置 max_line_width=np.inf 时,它适用于一维数组,但不适用于 ND 数组。

幸运的是,它返回了一个可以操作的字符串,例如通过删除所有换行符:

>>> np.array2string(arr, threshold=np.inf, max_line_width=np.inf, separator=',').replace('\n', '')
'[[ 0.15555605, 0.51031528, 0.84580176, 0.06722675], [ 0.60556045, 0.62721023,-0.48979983,-0.04152777], [-0.78044785, 0.58837543,-0.21146041,-0.13568023], [ 0.        , 0.        , 0.        , 1.        ]]'

或者使用正则表达式删除所有空格:

>>> import re
>>> re.sub(r'\s+', '', np.array2string(arr, threshold=np.inf, max_line_width=np.inf, separator=','))
'[[0.15555605,0.51031528,0.84580176,0.06722675],[0.60556045,0.62721023,-0.48979983,-0.04152777],[-0.78044785,0.58837543,-0.21146041,-0.13568023],[0.,0.,0.,1.]]'

同意这些并不是真正的“短”,而且它们也比使用 .tolist() 转换为 list 然后转换为字符串要慢,但这可能是一个不错的选择,特别是如果您想自定义打印结果而不创建一个(可能很大)不必要的列表。

【讨论】:

  • 要添加到这个,如果你有一个列表对象并且想要做同样的事情,只需将它包装在np.array()
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2021-08-16
  • 2021-12-05
  • 2019-09-01
  • 2017-07-12
相关资源
最近更新 更多