如何检查十进制.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数组。