如何在一行中打印一个 numpy.array?

Posted

技术标签:

【中文标题】如何在一行中打印一个 numpy.array?【英文标题】:How to print a numpy.array in one line? 【发布时间】:2018-09-01 10:20:24 【问题描述】:

我测试了 PyCharm 和 IDLE,它们都将第 7 个数字打印到第二行。

输入:

import numpy as np
a=np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
print(a)

输出:

[ 1.02090721  1.02763091  1.03899317  1.00630297  1.00127454  0.89916715
  1.04486896]

如何将它们打印在一行中?

【问题讨论】:

这只是因为您的 IDE 正在换行控制台。 这里有一个重复的帖子,答案是***.com/questions/44139508/… 它不是重复的,在我的例子中,尺寸是 1x7 @alessandrocb,我知道换行,但我的情况没有换行,它只是将第 7 行打印到第二行。 @zerocool 该问题明确将linewidth 设置为1000,但它没有帮助,因为它不是一维数组。对于这个问题,答案只是设置linewidth。 (另外,那个提问者想要列表等价物,这个不想要。) 【参考方案1】:

np.set_printoptions 允许修改打印的 NumPy 数组的“线宽”:

>>> import numpy as np

>>> np.set_printoptions(linewidth=np.inf)
>>> a = np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
>>> print(a)
[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]

它将在一行中打印所有一维数组。对于多维数组,它不会那么容易工作。


类似于here,如果您只想暂时更改它,您可以使用上下文管理器:

import numpy as np
from contextlib import contextmanager

@contextmanager
def print_array_on_one_line():
    oldoptions = np.get_printoptions()
    np.set_printoptions(linewidth=np.inf)
    yield
    np.set_printoptions(**oldoptions)

然后你像这样使用它(假设是新的解释器会话):

>>> import numpy as np
>>> np.random.random(10)  # default
[0.12854047 0.35702647 0.61189795 0.43945279 0.04606867 0.83215714
 0.4274313  0.6213961  0.29540808 0.13134124]

>>> with print_array_on_one_line():  # in this block it will be in one line
...     print(np.random.random(10))
[0.86671089 0.68990916 0.97760075 0.51284228 0.86199111 0.90252942 0.0689861  0.18049253 0.78477971 0.85592009]

>>> np.random.random(10)  # reset
[0.65625313 0.58415921 0.17207238 0.12483019 0.59113892 0.19527236
 0.20263972 0.30875768 0.50692189 0.02021453]

【讨论】:

【参考方案2】:

如果你想要定制版的str(a),答案是array_str

>>> print(a)
[ 1.02090721  1.02763091  1.03899317  1.00630297  1.00127454  0.89916715
  1.04486896]
>>> str(a)
'[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715\n 1.04486896]'
>>> np.array_str(a, max_line_width=np.inf)
'[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]'
>>> print(np.array_str(a, max_line_width=np.inf)
[1.02090721 1.02763091 1.03899317 1.00630297 1.00127454 0.89916715 1.04486896]

如果您想更改每个数组的打印输出,而不仅仅是这里,请参阅set_printoptions

【讨论】:

或通用版:array2string。但默认情况下它更接近repr ofc 它不适用于多维数组,因为为什么会这样?我确实下载了 numpy 只是为了在一维数组上使用它,一个简单的打印功能不起作用的事实说明了这个库的质量【参考方案3】:

打印时将类型转换为列表。

import numpy as np
a=np.array([ 1.02090721,  1.02763091,  1.03899317,  1.00630297,  1.00127454, 0.89916715,  1.04486896])
print(list(a))

这将打印在一行上。

【讨论】:

以上是关于如何在一行中打印一个 numpy.array?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用numpy将矩阵与另一个矩阵中的每一行相乘

numpy array的复制-老鱼学numpy

如何正确保存和加载 numpy.array() 数据?

如何在numpy.array中以热量方式将numpy.array传递给对象的方法

如何从Numpy Array中删除/删除异常值

如何在 numpy 数组中获取用户输入