我该如何打印格式化的NumPy数组,使其类似于这样:
x = 1.23456
print('%.3f' % x)
如果我想打印 numpy.ndarray
类型的浮点数,它会输出多个小数位数,通常以“科学”格式呈现,即使对于低维数组也很难阅读。但是,numpy.ndarray
显然必须作为字符串打印,即使用 %s
。有没有解决方法?
我该如何打印格式化的NumPy数组,使其类似于这样:
x = 1.23456
print('%.3f' % x)
如果我想打印 numpy.ndarray
类型的浮点数,它会输出多个小数位数,通常以“科学”格式呈现,即使对于低维数组也很难阅读。但是,numpy.ndarray
显然必须作为字符串打印,即使用 %s
。有没有解决方法?
我使用
def np_print(array,fmt="10.5f"):
print (array.size*("{:"+fmt+"}")).format(*array)
对于多维数组,修改并不困难。
我发现通常的浮点数格式{:9.5f}在使用循环显示列表或数组时可以正常工作 -- 可以抑制小值e-表示法。但是,当格式化程序在一个单独的打印语句中有多个项目时,该格式有时无法抑制其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
对于这个问题我没有解释,因此我总是使用循环来输出多个值的浮点数。
numpy.char.mod
也可能很有用,具体取决于您的应用程序细节,例如:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
将返回一个字符串数组,其中元素为"Value=5.00"、"Value=5.10"等(作为一个有点牵强的例子)。
decimal
模块: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']