在 python 如何在稀疏 csr_matrix 中替换 nan
In python how to replace nan in sparse csr_matrix
我已经堆叠了一个 sprase 矩阵和一个数据框。结果 csr_matrix 包含 NAN。
我的问题是如何将这些 nan 值更新为 0 。
X_train_1hc = sp.sparse.hstack([X_train_1hc, X_train_df.values]).tocsr()
当我将 X_train_1hc 传递给分类器时出现错误 Input contains NaN or infinity or a value too large for dtype('float')
1.Is 有一个 option/function/hack 来替换稀疏矩阵中的 nan 值。
这是一个概念性问题,因此没有提供任何数据。
扩展一下 Martin 的回答,这是一种方法。假设您有一个 csr_matrix
和一些 NaN
值:
>>> Asp.todense()
matrix([[0.37512508, nan, 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, nan, 0.22877082]])
由于 csr_matrix
将非零值存储在 the data
attribute 中,您需要操作该数组。用 0 和一些大数字(实际上是可表示的最大数字)替换 NaN
和 inf
的所有出现,你可以做
>>> Asp.data = np.nan_to_num(Asp.data, copy=False)
>>> Asp.todense()
matrix([[0.37512508, 0. , 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, 0. , 0.22877082]])
或者,您可以像这样手动替换 NaN
:
>>> Asp.data[np.isnan(Asp.data)] = 0.0
>>> Asp.todense()
matrix([[0.37512508, 0. , 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, 0. , 0.22877082]])
我已经堆叠了一个 sprase 矩阵和一个数据框。结果 csr_matrix 包含 NAN。
我的问题是如何将这些 nan 值更新为 0 。
X_train_1hc = sp.sparse.hstack([X_train_1hc, X_train_df.values]).tocsr()
当我将 X_train_1hc 传递给分类器时出现错误 Input contains NaN or infinity or a value too large for dtype('float')
1.Is 有一个 option/function/hack 来替换稀疏矩阵中的 nan 值。 这是一个概念性问题,因此没有提供任何数据。
扩展一下 Martin 的回答,这是一种方法。假设您有一个 csr_matrix
和一些 NaN
值:
>>> Asp.todense()
matrix([[0.37512508, nan, 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, nan, 0.22877082]])
由于 csr_matrix
将非零值存储在 the data
attribute 中,您需要操作该数组。用 0 和一些大数字(实际上是可表示的最大数字)替换 NaN
和 inf
的所有出现,你可以做
>>> Asp.data = np.nan_to_num(Asp.data, copy=False)
>>> Asp.todense()
matrix([[0.37512508, 0. , 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, 0. , 0.22877082]])
或者,您可以像这样手动替换 NaN
:
>>> Asp.data[np.isnan(Asp.data)] = 0.0
>>> Asp.todense()
matrix([[0.37512508, 0. , 0.34919696, 0.10321203],
[0.48744859, 0.07289436, 0.16881342, 0.57637166],
[0.37742037, 0.01425494, 0.38536847, 0.23799655],
[0.95520474, 0.97719059, 0. , 0.22877082]])