如何检查一个数字是np.float64还是np.float32或np.float16?

Gin*_*ger 9 python numpy

除了使用一组或语句

isinstance( x, np.float64 )isinstance( x, np.float32 )isinstance( np.float16 )

是否有更简洁的方法来检查变量是浮动类型?

And*_*den 20

你可以使用np.floating:

In [11]: isinstance(np.float16(1), np.floating)
Out[11]: True

In [12]: isinstance(np.float32(1), np.floating)
Out[12]: True

In [13]: isinstance(np.float64(1), np.floating)
Out[13]: True
Run Code Online (Sandbox Code Playgroud)

注意:非numpy类型返回False:

In [14]: isinstance(1, np.floating)
Out[14]: False

In [15]: isinstance(1.0, np.floating)
Out[15]: False
Run Code Online (Sandbox Code Playgroud)

要包含更多类型,例如python浮点数,您可以在isinstance中使用元组:

In [16]: isinstance(1.0, (np.floating, float))
Out[16]: True
Run Code Online (Sandbox Code Playgroud)

  • `np.issubdtype(type(x), np.floating)` 也很有用,它包括 `float`。 (3认同)
  • 感谢@MarcGlisse,这种方法的优点是检查整个数组的正确数据类型。即“np.issubdtype(x.dtype, np.floating)”。 (3认同)

MEO*_*WWW 6

为了检查 numpy 数组中的数字,它为一般类型的数据提供“字符代码”。

x = np.array([3.6, 0.3])
if x.dtype.kind == 'f':
    print('x is floating point')
Run Code Online (Sandbox Code Playgroud)

请参阅手册中的其他类型数据。

isinstance使用andis运算符确定数字类型时要小心。

import numpy as np
a = np.array([1.2, 1.3], dtype=np.float32)

print(isinstance(a.dtype, np.float32))     # False
print(isinstance(type(a[0]), np.float32))  # False
print(a.dtype is np.float32)               # False
print(type(a[0]) is np.dtype(np.float32))  # False

print(isinstance(a[0], np.float32))        # True
print(type(a[0]) is np.float32)            # True
print(a.dtype == np.float32)               # True
Run Code Online (Sandbox Code Playgroud)