我如何打印格式化的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
from decimal import *
arr = np.array([ 56.83, 385.3 , 6.65, 126.63, 85.76, 192.72, 112.81, 10.55])
arr2 = [str(Decimal(i).quantize(Decimal('.01'))) for i in arr]
# ['56.83', '385.30', '6.65', '126.63', '85.76', '192.72', '112.81', '10.55']
其他回答
numpy数组有round(precision)方法,该方法返回一个新的numpy数组,其中的元素是四舍五入的。
import numpy as np
x = np.random.random([5,5])
print(x.round(3))
很惊讶没有看到周围的方法提到-意思是没有搞乱打印选项。
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]]
这是我用的,它很简单:
print(np.vectorize("%.2f".__mod__)(sparse))
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]
用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. ]]