提问人:bproxauf 提问时间:7/8/2019 更新时间:7/8/2019 访问量:4523
Python 检查数组的 dtype - 浮点数或复数
Python check dtype of array - float or complex
问:
如果是浮点数或复杂 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')
答:
1赞
vlemaistre
7/8/2019
#1
您可以将该功能与该功能结合使用。all()
isinstance()
如果列表的所有元素都为 true,则该函数返回 True,您可以使用 .由于将“>f8”视为浮点数,因此比较不会引发您遇到的问题。all()
isinstance()
isinstance()
这是它的样子:
b = np.zeros(10,dtype='>f8')
all(isinstance(x, float) for x in b)
输出:
True
评论
1赞
Rory Daulton
7/8/2019
也许你应该解释为什么程序不应该测试或类似的东西。反正+1。type(b[0]) == float
0赞
bproxauf
7/8/2019
是否也有针对空数组的解决方案,即?只是出于好奇......np.array([])
0赞
mcrot
7/8/2019
使用也适用于空数组:为 True 和 False。np.isrealobj()
np.isrealobj(np.array([]))
np.isrealobj(np.array([], dtype=complex))
0赞
vlemaistre
7/8/2019
@bproxauf all(b) 在 true 时返回 true,如果 b 为空,则仅使用 all 函数就无法解决这个问题。但是您可以添加这样的条件来获得适当的结果all(b) and len(b) != 0
0赞
burnpanck
8/6/2021
检查数组中所有元素的类型不是一个好主意:Numpy 保证所有元素都具有相同的类型(对象数组除外),这是 numpy 性能的主要原因。
9赞
mcrot
7/8/2019
#2
你试过吗?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。
检查输入的类型,而不是值。所以即使输入 虚部等于零,计算结果为 False 如果数据类型复杂。
isrealobj
还可以按值进行检查:和。np.isreal
np.iscomplex
这有帮助吗?
评论
0赞
bproxauf
7/8/2019
绝对有帮助,即使是空数组,感谢您的建议。
0赞
mcrot
7/8/2019
如果你对我的回答完全满意,请考虑接受。谢谢!
评论
np.iscomplexobj
测试 : .基本 dtypes 具有多个子类级别,因此简单的“==”测试并不总是有效。type
dtype
issubclass(arr.dtype.type, np.complexfloating)