我如何打印格式化的NumPy数组以类似于这样的方式:
x = 1.23456
print('%.3f' % x)
如果我想打印numpy。Ndarray的浮点数,它打印几个小数,通常是“科学”格式,即使对于低维数组也很难读取。然而,numpy。Ndarray显然必须被打印为字符串,即%s。有解决办法吗?
我如何打印格式化的NumPy数组以类似于这样的方式:
x = 1.23456
print('%.3f' % x)
如果我想打印numpy。Ndarray的浮点数,它打印几个小数,通常是“科学”格式,即使对于低维数组也很难读取。然而,numpy。Ndarray显然必须被打印为字符串,即%s。有解决办法吗?
当前回答
numpy数组有round(precision)方法,该方法返回一个新的numpy数组,其中的元素是四舍五入的。
import numpy as np
x = np.random.random([5,5])
print(x.round(3))
其他回答
用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数组有round(precision)方法,该方法返回一个新的numpy数组,其中的元素是四舍五入的。
import numpy as np
x = np.random.random([5,5])
print(x.round(3))
我经常希望不同的列具有不同的格式。以下是我如何通过将NumPy数组(切片)转换为元组来打印一个简单的2D数组:
import numpy as np
dat = np.random.random((10,11))*100 # Array of random values between 0 and 100
print(dat) # Lines get truncated and are hard to read
for i in range(10):
print((4*"%6.2f"+7*"%9.4f") % tuple(dat[i,:]))
我发现在使用循环显示列表或数组时,通常的浮点格式{:9.5f}工作正常——抑制小值e符号。但是,当格式化程序在单个print语句中包含多个项时,这种格式有时无法抑制其e符号。例如:
import numpy as np
np.set_printoptions(suppress=True)
a3 = 4E-3
a4 = 4E-4
a5 = 4E-5
a6 = 4E-6
a7 = 4E-7
a8 = 4E-8
#--first, display separate numbers-----------
print('Case 3: a3, a4, a5: {:9.5f}{:9.5f}{:9.5f}'.format(a3,a4,a5))
print('Case 4: a3, a4, a5, a6: {:9.5f}{:9.5f}{:9.5f}{:9.5}'.format(a3,a4,a5,a6))
print('Case 5: a3, a4, a5, a6, a7: {:9.5f}{:9.5f}{:9.5f}{:9.5}{:9.5f}'.format(a3,a4,a5,a6,a7))
print('Case 6: a3, a4, a5, a6, a7, a8: {:9.5f}{:9.5f}{:9.5f}{:9.5f}{:9.5}{:9.5f}'.format(a3,a4,a5,a6,a7,a8))
#---second, display a list using a loop----------
myList = [a3,a4,a5,a6,a7,a8]
print('List 6: a3, a4, a5, a6, a7, a8: ', end='')
for x in myList:
print('{:9.5f}'.format(x), end='')
print()
#---third, display a numpy array using a loop------------
myArray = np.array(myList)
print('Array 6: a3, a4, a5, a6, a7, a8: ', end='')
for x in myArray:
print('{:9.5f}'.format(x), end='')
print()
我的结果显示了情况4、5和6中的错误:
Case 3: a3, a4, a5: 0.00400 0.00040 0.00004
Case 4: a3, a4, a5, a6: 0.00400 0.00040 0.00004 4e-06
Case 5: a3, a4, a5, a6, a7: 0.00400 0.00040 0.00004 4e-06 0.00000
Case 6: a3, a4, a5, a6, a7, a8: 0.00400 0.00040 0.00004 0.00000 4e-07 0.00000
List 6: a3, a4, a5, a6, a7, a8: 0.00400 0.00040 0.00004 0.00000 0.00000 0.00000
Array 6: a3, a4, a5, a6, a7, a8: 0.00400 0.00040 0.00004 0.00000 0.00000 0.00000
我对此没有解释,因此我总是使用循环来浮动多个值的输出。
这是我用的,它很简单:
print(np.vectorize("%.2f".__mod__)(sparse))