[英]Formatting floats in a numpy array
如果我有一個像這樣的numpy數組:
[2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01]
我如何移動小數點並設置數字格式,所以最終得到一個像這樣的numpy數組:
[21.53, 8.13, 3.97, 10.08]
np.around(a, decimals=2)
只給我[2.15300000e+01, 8.13000000e+00, 3.97000000e+00, 1.00800000e+01]
我不想要,但我還沒有找到另一種方法它。
為了使numpy以任意格式顯示浮點數組,可以定義一個自定義函數,該函數將一個浮點值作為其輸入並返回格式化的字符串:
In [1]: float_formatter = "{:.2f}".format
這里的f
表示定點格式(不是“科學”),而.2
表示小數點后兩位(您可以在此處閱讀有關字符串格式的更多信息)。
讓我們用一個浮點值對其進行測試:
In [2]: float_formatter(1.234567E3)
Out[2]: '1234.57'
要使numpy以這種方式打印所有浮點數組,可以將formatter=
參數傳遞給np.set_printoptions
:
In [3]: np.set_printoptions(formatter={'float_kind':float_formatter})
現在numpy將以這種方式打印所有浮點數組:
In [4]: np.random.randn(5) * 10
Out[4]: array([5.25, 3.91, 0.04, -1.53, 6.68]
請注意,這僅影響numpy數組,而不影響標量:
In [5]: np.pi
Out[5]: 3.141592653589793
它還不會影響非浮點數,復雜的浮點數等-您將需要為其他標量類型定義單獨的格式化程序。
您還應該知道,這只會影響numpy顯示浮點值的方式-用於計算的實際值將保留其原始精度。
例如:
In [6]: a = np.array([1E-9])
In [7]: a
Out[7]: array([0.00])
In [8]: a == 0
Out[8]: array([False], dtype=bool)
numpy打印a
就像它等於0
,但不是-仍然等於1E-9
。
如果您實際上想以某種方式舍入數組中的值,從而影響它們在計算中的使用np.round
,則應使用np.round
,正如其他人已經指出的那樣。
您會混淆實際精度和顯示精度。 小數舍入不能完全用二進制表示。 你應該試試:
> np.set_printoptions(precision=2)
> np.array([5.333333])
array([ 5.33])
您可以使用倒圓角功能。 這里有一些例子
numpy.round([2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01],2)
array([ 21.53, 8.13, 3.97, 10.08])
如果您只想更改顯示形式, 則不建議像上面建議的那樣全局更改打印格式。 我將格式化我的輸出。
>>a=np.array([2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01])
>>> print([ "{:0.2f}".format(x) for x in a ])
['21.53', '8.13', '3.97', '10.08']
[ round(x,2) for x in [2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.