numpy数组的字符串表示形式,用逗号分隔其元素

时间:2013-05-07 16:11:47

标签: python numpy

我有一个numpy数组,例如:

points = np.array([[-468.927,  -11.299,   76.271, -536.723],
                   [-429.379, -694.915, -214.689,  745.763],
                   [   0.,       0.,       0.,       0.   ]])

如果我打印它或将其变成带有str()的字符串,我得到:

print w_points
[[-468.927  -11.299   76.271 -536.723]
 [-429.379 -694.915 -214.689  745.763]
 [   0.       0.       0.       0.   ]]

我需要把它变成一个字符串,用逗号分隔打印,同时保持2D数组结构,即:

[[-468.927,  -11.299,   76.271, -536.723],
 [-429.379, -694.915, -214.689,  745.763],
 [   0.,       0.,       0.,       0.   ]]

有人知道将numpy数组转换为该形式的字符串的简单方法吗?

我知道.tolist()会添加逗号但结果会丢失2D结构。

4 个答案:

答案 0 :(得分:48)

尝试使用repr

>>> import numpy as np
>>> points = np.array([[-468.927,  -11.299,   76.271, -536.723],
...                    [-429.379, -694.915, -214.689,  745.763],
...                    [   0.,       0.,       0.,       0.   ]])
>>> print repr(points)
array([[-468.927,  -11.299,   76.271, -536.723],
       [-429.379, -694.915, -214.689,  745.763],
       [   0.   ,    0.   ,    0.   ,    0.   ]])

如果您打算使用大型numpy数组,请先设置np.set_printoptions(threshold=np.nan)。没有它,数组表示将在大约1000个条目之后被截断(默认情况下)。

>>> arr = np.arange(1001)
>>> print repr(arr)
array([   0,    1,    2, ...,  998,  999, 1000])

当然,如果你有大的数组,这开始变得不那么有用了你应该以某种方式分析数据,而不仅仅是看它而且有better ways持久的numpy数组而不是保存它repr到文件...

答案 1 :(得分:16)

现在,在numpy 1.11中,有numpy.array2string

In [279]: a = np.reshape(np.arange(25, dtype='int8'), (5, 5))

In [280]: print(np.array2string(a, separator=', '))
[[ 0,  1,  2,  3,  4],
 [ 5,  6,  7,  8,  9],
 [10, 11, 12, 13, 14],
 [15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24]]

与@mgilson的repr比较(显示" array()"和dtype):

In [281]: print(repr(a))
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]], dtype=int8)

P.S。对于大型数组仍然需要np.set_printoptions(threshold=np.nan)

答案 2 :(得分:2)

另一种方法是在对象没有__repr __()方法时特别有用,就是使用Python的pprint模块(它有各种格式化选项)。以下是示例:

>>> import numpy as np
>>> import pprint
>>>
>>> A = np.zeros(10, dtype=np.int64)
>>>
>>> print(A)
[0 0 0 0 0 0 0 0 0 0]
>>>
>>> pprint.pprint(A)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

答案 3 :(得分:1)

您要寻找的功能是np.set_string_functionsource

此函数的作用是让您覆盖numpy对象的默认__str____repr__函数。如果将repr标志设置为True,则__repr__函数将被您的自定义函数覆盖。同样,如果设置repr=False,则__str__函数将被覆盖。由于print调用了对象的__str__函数,因此我们需要设置repr=False

例如:

np.set_string_function(lambda x: repr(x), repr=False)
x = np.arange(5)
print(x)

将打印输出

array([0, 1, 2, 3, 4])

更美观的版本是

np.set_string_function(lambda x: repr(x).replace('(', '').replace(')', '').replace('array', '').replace("       ", ' ') , repr=False)

print(np.eye(3))

给出

[[1., 0., 0.],
 [0., 1., 0.],
 [0., 0., 1.]]

希望这能回答您的问题。