如何解决如何检查十进制.is_nan中数组中的所有值?
假设我有这样的数组:
from decimal import Decimal
array = [Decimal(np.nan),Decimal(np.nan),Decimal(0.231411)]
我知道如果类型是float
,我可以检查所有值是否都是nan
,如:
np.isnan(array).all()
是否可以使用类型Decimal
?
没有迭代的解决方案会更好。
解决方法
根据我上面的评论,我意识到这是一个迭代。原因是np.isnan
不支持Decimal
作为输入类型。因此,我认为如果不转换数据类型就无法通过广播完成此操作-这意味着潜在的精度损失,这就是使用Decimal
类型的原因。
此外,如@ juanpa.arrivillaga所述,由于Decimal
对象位于list
中,因此,迭代是唯一的方法。在此操作中不需要脾气暴躁。
一种方法是:
all([i.is_nan() for i in array])
,
您可以使用NumPy的vectorize
来避免迭代。
In [40]: from decimal import Decimal
In [41]: import numpy as np
In [42]: nums = [Decimal(np.nan),Decimal(np.nan),Decimal(0.231411)]
In [43]: nums
Out[43]:
[Decimal('NaN'),Decimal('NaN'),Decimal('0.2314110000000000055830895462349872104823589324951171875')]
In [44]: np.all(np.vectorize(lambda x: x.is_nan())(np.asarray(nums)))
Out[44]: False
In [45]: np.all(np.vectorize(lambda x: x.is_nan())(np.asarray(nums[:-1])))
Out[45]: True
在nums
上方的代码段中,列出了类Decimal
的实例。请注意,您需要将该列表转换为NumPy数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。