Python检查数组的数据类型-浮点或复数
如果是浮点或复杂数据类型,如何检查numpy数组?对于简单的示例,以下检查所有工作正常Python检查数组的数据类型-浮点或复数,python,arrays,numpy,types,Python,Arrays,Numpy,Types,如果是浮点或复杂数据类型,如何检查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 但是,我有一个dtypedt
# 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')
数组。前面的比较都没有将其标识为浮点数组。就我所知,endianness(>vs.可以使用all()
函数和isinstance()
函数组合使用
如果列表中的所有元素都为True,则函数返回True,您可以使用isinstance()
检查numpy数组中的每个数字是否为浮点。由于isinstance()
将'>f8'视为浮点,因此比较不会引发您遇到的问题
下面是它的外观:
b = np.zeros(10,dtype='>f8')
all(isinstance(x, float) for x in b)
输出:
True
您可以将
all()
函数与isinstance()
函数结合使用
如果列表中的所有元素都为True,则函数返回True,您可以使用isinstance()
检查numpy数组中的每个数字是否为浮点。由于isinstance()
将'>f8'视为浮点,因此比较不会引发您遇到的问题
下面是它的外观:
b = np.zeros(10,dtype='>f8')
all(isinstance(x, float) for x in b)
输出:
True
您是否尝试过
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
这有用吗?您是否尝试过
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
这有帮助吗?也许你应该解释一下为什么程序不应该测试
类型(b[0])==float
或类似的东西。+1。是否也有空数组的解决方案,即np.array([])
?只是出于好奇……使用np.isrealobj()
也适用于空数组:np.isrealobj(np.array([]))
为True,而np.isrealobj(np.array([],dtype=complex))
为False。@bproxauf all(b)在为True时返回True如果b为空,则仅使用all函数无法解决此问题。但您可以添加类似于soall(b)和len(b)的条件!=0
要获得适当的结果,您应该解释为什么程序不应该测试类型(b[0])==float
或类似的东西。+1。是否也有空数组的解决方案,即np.array([])
?出于好奇…使用np.isrealobj()
也适用于空数组:np.isrealobj(np.array([])
为真,np.isrealobj(np.array([],dtype=complex))
为假。@bproxauf all(b)在b为空时返回真,如果b为空,则仅使用all函数无法解决此问题。但您可以添加类似于这样的条件all(b)和len(b)= 0 得到适当的结果肯定有帮助,即使是空数组,谢谢你的建议。如果你对我的答案完全满意,请考虑接受它。谢谢!绝对帮助,即使是空数组,谢谢你的建议。如果你对我的答案完全满意,请考虑接受它。谢谢!<代码> NP.ISCOmplexobj
测试dtype
的type
:issubclass(arr.dtype.type,np.complexfloating)
。基本数据类型有几个级别的子类化,因此简单的“=”测试并不总是有效。np.iscomplexobj
测试dtype
的类型
:issubclass>(arr.dtype.type,np.complexfloating)
。基本数据类型有几个级别的子类,因此简单的“==”测试并不总是有效。