簡體   English   中英

np.inf 和 float('Inf') 的區別

[英]difference between np.inf and float('Inf')

NumPy np.inffloat('Inf')之間有什么區別嗎? float('Inf') == np.inf返回True ,所以看起來它們是可以互換的,因此我想知道為什么 NumPy 定義了自己的“inf”常量,我什么時候應該使用一個常量而不是另一個(考慮樣式也有顧慮)?

TL、DR:沒有區別,它們可以互換使用。

除了與math.inffloat('inf')具有相同的值:

>>> import math
>>> import numpy as np

>>> np.inf == float('inf')
True
>>> np.inf == math.inf
True

它也有相同的類型:

>>> import numpy as np
>>> type(np.inf)
float
>>> type(np.inf) is type(float('inf'))
float

這很有趣,因為 NumPy 也有它自己的浮點類型:

>>> np.float32(np.inf)
inf
>>> type(np.float32(np.inf))
numpy.float32
>>> np.float32('inf') == np.inf  # nevertheless equal
True

因此它與math.inffloat('inf')具有相同的值和相同的類型,這意味着它是可以互換的。

使用np.inf原因

  1. 輸入更少:

    • np.inf (6 個字符)
    • math.inf (8 個字符;python 3.5 中的新內容)
    • float('inf') (12 個字符)

    這意味着如果您已經導入了 NumPy,與float('inf') (或math.inf )相比,每次出現您可以節省 6(或 2)個字符。

  2. 因為更容易記住。

    至少對我來說,記住np.inf比我需要用字符串調用float容易得多。

    此外,NumPy 還為無窮大定義了一些額外的別名:

     np.Inf np.inf np.infty np.Infinity np.PINF

    它還定義了負無窮大的別名:

     np.NINF

    同樣對於nan

     np.nan np.NaN np.NAN
  3. 常數就是常數

    這一點基於 CPython,在另一個 Python 實現中可能完全不同。

    一個float CPython 實例需要 24 個字節:

     >>> import sys >>> sys.getsizeof(np.inf) 24

    如果您可以重用同一個實例,與創建大量新實例相比,您可能會節省大量內存。 當然,如果您創建自己的inf常量,這一點是inf但如果您不這樣做:

     a = [np.inf for _ in range(1000000)] b = [float('inf') for _ in range(1000000)]

    b將使用比a多 24 * 1000000 字節(~23 MB)的內存。

  4. 訪問常量比創建變量快。

     %timeit np.inf 37.9 ns ± 0.692 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) %timeit float('inf') 232 ns ± 13.9 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each) %timeit [np.inf for _ in range(10000)] 552 µs ± 15.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) %timeit [float('inf') for _ in range(10000)] 2.59 ms ± 78.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

    當然,您可以創建自己的常量來反駁這一點。 但是如果 NumPy 已經為你做了那又何必呢。

暫無
暫無

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

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