在python中如何替换稀疏csr_matrix中的nan

时间:2019-06-09 16:12:24

标签: python sparse-matrix feature-extraction

我已经堆叠了一个sprase矩阵和一个dataframe。生成的csr_matrix包含NAN。

我的问题是如何将这些nan值更新为0。

X_train_1hc = sp.sparse.hstack([X_train_1hc, X_train_df.values]).tocsr()

当我将X_train_1hc传递给分类器时,出现错误输入内容包含NaN或无穷大,或者对于dtype('float')而言值太大

1。是否存在用于替换稀疏矩阵中的nan值的选项/函数/ hack。 这是一个概念性问题,因此没有提供任何数据。

1 个答案:

答案 0 :(得分:0)

扩展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中,因此您需要操纵该数组。您可以将NaNinf的所有出现替换为0和一个较大的数字(实际上是可表示的最大数字)

>>> 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]])