簡體   English   中英

Python float 和 numpy float32 的區別

[英]Difference between Python float and numpy float32

內置的floatnumpy.float32什么區別?

例子

a = 58682.7578125
print type(a)
print a
print type(numpy.float32(a))
print numpy.float32(a)

Output:

<type 'float'>
58682.7578125
<type 'numpy.float32'>
58682.8

我在這里發現numpy.float32是:

float32 單精度浮點數:符號位,8位指數,23位尾數

沒有找到內置的float格式是什么。

Python的標准float類型是C doublehttp//docs.python.org/2/library/stdtypes.html#typesnumeric

NumPy的標准numpy.float是相同的,也和numpy.float64

數據類型方面的 numpy 浮點數和內置的 Python 浮點數是相同的,但是 boolean 對 numpy 浮點數的操作返回np.bool_對象,對於val is True總是返回False 示例如下:

In [1]: import numpy as np
   ...: an_np_float = np.float32(0.3)
   ...: a_normal_float = 0.3
   ...: print(a_normal_float, an_np_float)
   ...: print(type(a_normal_float), type(an_np_float))

0.3 0.3
<class 'float'> <class 'numpy.float32'>

Numpy 浮點數可以從數組運算的標量 output 中產生。 如果您不檢查數據類型,很容易將 numpy 浮點數與本機浮點數混淆。

In [2]: criterion_fn = lambda x: x <= 0.5
   ...: criterion_fn(a_normal_float), criterion_fn(an_np_float)

Out[2]: (True, True)

甚至 boolean 操作看起來都是正確的。 但是 numpy 浮點數的結果不是本機 boolean 數據類型,因此不可能為真。


In [3]: criterion_fn(a_normal_float) is True, criterion_fn(an_np_float) is True
Out[3]: (True, False)

In [4]: type(criterion_fn(a_normal_float)), type(criterion_fn(an_np_float))
Out[4]: (bool, numpy.bool_)

根據這個 github threadcriterion_fn(an_np_float) == True將正確評估,但這違反了 PEP8 風格指南。

相反,從 numpy 操作的結果中提取本機浮點數。 您可以執行an_np_float.item()來顯式執行此操作(參考: this SO post )或簡單地通過float()傳遞值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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