簡體   English   中英

格式化浮點數數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM