gpt4 book ai didi

python - 如何在我的 numpy 数组中找到 NaN/无穷大/对于 dtype ('float64' 太大的值?

转载 作者:行者123 更新时间:2023-12-04 04:31:01 33 4
gpt4 key购买 nike

我正在尝试使用 scikit learn 拟合一个简单的机器学习模型。在这条线上:

clf.fit(features, labels)

我得到一个熟悉的错误:
 Input contains NaN, infinity or a value too large for dtype('float64').

每当我之前遇到过这种情况时,我的数据中就有 NaN 值。我已经确认数据中没有 NaN。 .fit() 方法的两个输入(特征和标签)是 np 数组,但它们是从 Pandas 数据帧生成的。在拉出我打印的 NaN 值之前:
print(features_df[features_df.isnull().any(axis=1)])
print(labels_df[labels_df.isnull().any(axis=1)])

这打印了空数据帧,所以我知道其中没有包含 NaN 值的行。我还在转换后检查了 numpy 数组的 NaN 值,甚至使用 np sum() 方法成功地对它们求和,因此传递到 fit 的特征或标签 np 数组中没有 NaN 值。

这意味着必须有无穷大的值或非常大的值,我觉得这两者都令人难以置信。有什么方法可以打印数据帧或 np 数组中的任何值:
are NaN, infinity or a value too large for dtype('float64')?

我需要特别指出它们,因为我无法用肉眼找到它们并且没有 NaN 值。

最佳答案

假设这是 numpy 数组,形状为 (3,3) :

ar = np.array([1, 2, 3, 4, np.nan, 5, np.nan, 6, np.inf]).reshape((3,3))
print (ar)
[[ 1. 2. 3.]
[ 4. nan 5.]
[nan 6. inf]]
要检查 NaN、正无穷大、负无穷大或它们的不同组合,我们可以使用:
numpy.isnan(ar)     # True wherever nan
numpy.isposinf(ar) # True wherever pos-inf
numpy.isneginf(ar) # True wherever neg-inf
numpy.isinf(ar) # True wherever pos-inf or neg-inf
~numpy.isfinite(ar) # True wherever pos-inf or neg-inf or nan
分别。每个都返回一个 bool 数组,并将 bool 数组传递给 numpy.where()给了我们两个索引数组( ar 的每个维度一个索引数组):
ar_nan = np.where(np.isnan(ar))
print (ar_nan)

(array([1, 2], dtype=int64), array([1, 0], dtype=int64)) # Means, nansat (1,1) and (2,0)


ar_inf = np.where(np.isinf(ar))
print (ar_inf)

(array([2], dtype=int64), array([2], dtype=int64)) # Means, inf is at(2,2)


另外,要查看 float64 的限制:
np.finfo(np.float64)

finfo(resolution=1e-15, min=-1.7976931348623157e+308,max=1.7976931348623157e+308, dtype=float64)

关于python - 如何在我的 numpy 数组中找到 NaN/无穷大/对于 dtype ('float64' 太大的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55193696/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com