我如何打印格式化的NumPy数组以类似于这样的方式:
x = 1.23456
print('%.3f' % x)
如果我想打印numpy。Ndarray的浮点数,它打印几个小数,通常是“科学”格式,即使对于低维数组也很难读取。然而,numpy。Ndarray显然必须被打印为字符串,即%s。有解决办法吗?
我如何打印格式化的NumPy数组以类似于这样的方式:
x = 1.23456
print('%.3f' % x)
如果我想打印numpy。Ndarray的浮点数,它打印几个小数,通常是“科学”格式,即使对于低维数组也很难读取。然而,numpy。Ndarray显然必须被打印为字符串,即%s。有解决办法吗?
当前回答
很惊讶没有看到周围的方法提到-意思是没有搞乱打印选项。
import numpy as np
x = np.random.random([5,5])
print(np.around(x,decimals=3))
Output:
[[0.475 0.239 0.183 0.991 0.171]
[0.231 0.188 0.235 0.335 0.049]
[0.87 0.212 0.219 0.9 0.3 ]
[0.628 0.791 0.409 0.5 0.319]
[0.614 0.84 0.812 0.4 0.307]]
其他回答
我使用
def np_print(array,fmt="10.5f"):
print (array.size*("{:"+fmt+"}")).format(*array)
对多维数组进行修改并不难。
用np。Array_str只对单个打印语句应用格式化。它给出了np的一个子集。set_printoptions的功能。
例如:
In [27]: x = np.array([[1.1, 0.9, 1e-6]] * 3)
In [28]: print(x)
[[ 1.10000000e+00 9.00000000e-01 1.00000000e-06]
[ 1.10000000e+00 9.00000000e-01 1.00000000e-06]
[ 1.10000000e+00 9.00000000e-01 1.00000000e-06]]
In [29]: print(np.array_str(x, precision=2))
[[ 1.10e+00 9.00e-01 1.00e-06]
[ 1.10e+00 9.00e-01 1.00e-06]
[ 1.10e+00 9.00e-01 1.00e-06]]
In [30]: print(np.array_str(x, precision=2, suppress_small=True))
[[ 1.1 0.9 0. ]
[ 1.1 0.9 0. ]
[ 1.1 0.9 0. ]]
Numpy 1.15(待定发布日期)将包含一个上下文管理器,用于在本地设置打印选项。这意味着下面的工作将与接受的答案(由unutbu和Neil G)中的相应示例相同,而无需编写自己的上下文管理器。举个例子:
x = np.random.random(10)
with np.printoptions(precision=3, suppress=True):
print(x)
# [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]
gem使它太容易获得字符串形式的结果(在今天的numpy版本中)隐藏在denis answer中: np.array2string
>>> import numpy as np
>>> x=np.random.random(10)
>>> np.array2string(x, formatter={'float_kind':'{0:.3f}'.format})
'[0.599 0.847 0.513 0.155 0.844 0.753 0.920 0.797 0.427 0.420]'
很惊讶没有看到周围的方法提到-意思是没有搞乱打印选项。
import numpy as np
x = np.random.random([5,5])
print(np.around(x,decimals=3))
Output:
[[0.475 0.239 0.183 0.991 0.171]
[0.231 0.188 0.235 0.335 0.049]
[0.87 0.212 0.219 0.9 0.3 ]
[0.628 0.791 0.409 0.5 0.319]
[0.614 0.84 0.812 0.4 0.307]]