如何检查浮点数或复杂dtype的numpy数组?对于简单的示例,以下检查都可以正常工作。
# these are True
a = np.zeros(10)
a.dtype == float
a.dtype == np.float
a.dtype == np.float64
b = np.zeros(10,dtype=complex)
b.dtype == complex
b.dtype == np.complex
b.dtype == np.complex128
但是,我有一个dtype dtype('>f8')
数组。以前的比较都没有将其标识为float数组。据我所知,那里的问题是字节序(> vs. <)。是否有任何常规功能可以检查数组是否为带所有变化的浮点型或复杂型?
答案 0 :(得分:2)
您可以将all()
函数与isinstance()
函数结合使用。
如果列表的所有元素均为true,则all()
函数将返回True,并且您可以使用isinstance()
检查numpy数组中的每个数字是否都是浮点数。由于isinstance()
认为'> f8'是浮点数,因此比较不会引起您遇到的问题。
这是它的样子:
b = np.zeros(10,dtype='>f8')
all(isinstance(x, float) for x in b)
输出:
True
答案 1 :(得分:1)
您尝试过numpy.isrealobj()
和np.iscomplexobj()
吗?
您的示例:
import numpy as np
a = np.zeros(10)
print(np.isrealobj(a)) # -> True
print(np.iscomplexobj(a)) # -> False
b = np.zeros(10,dtype=complex)
print(np.isrealobj(b)) # -> False
print(np.iscomplexobj(b)) # -> True
c=np.zeros(10, dtype='>f8')
print(np.isrealobj(c)) # -> True
print(np.iscomplexobj(c)) # -> False
np.isrealobj(x)
的文档说明:
如果x是非复数类型或复数数组,则返回True。
检查输入的类型,而不是值。所以即使输入 虚部等于零,
isrealobj
的计算结果为False 如果数据类型复杂。
还可以通过值np.isreal
和np.iscomplex
进行检查。
有帮助吗?