我有一个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结构。
答案 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_function
。 source
此函数的作用是让您覆盖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.]]
希望这能回答您的问题。