`np.concatenate`是一个带有稀疏矩阵的numpy数组

时间:2018-03-22 03:56:58

标签: python numpy scikit-learn

数据集包含数字和分类变量,然后我将其拆分为两部分:

cont_data = data[cont_variables].values
disc_data = data[disc_variables].values

然后我使用sklearn.preprocessing.OneHotEncoder对分类数据进行编码,然后我尝试将编码的分类数据与数值数据合并:

np.concatenate((cont_data, disc_data_coded), axis=1)

但发生以下错误:

ValueError: all the input arrays must have same number of dimensions

我确保维度的数量相等:

print(cont_data.shape)        # (24000, 35)
print(disc_data_coded.shape)  # (24000, 26)

最后,我发现cont_datanumpy array

>>> disc_data_coded
<24000x26 sparse matrix of type '<class 'numpy.float64'>'
with 312000 stored elements in Compressed Sparse Row format>

我将sparse中的参数OneHotEncoder更改为False,一切正常。 但问题是,如何在不设置numpy array的情况下直接合并sparse matrixsparse=False

1 个答案:

答案 0 :(得分:3)

稀疏矩阵不是numpy数组的子类;所以numpy方法通常不起作用。请改用稀疏函数,例如sparse.vstacksparse.hstack。但是所有输入都必须稀疏。

或者首先使用.toarray()使稀疏矩阵密集,然后使用np.concatenate

您希望结果稀疏还是密集?

In [32]: sparse.vstack((sparse.csr_matrix(np.arange(10)),sparse.csr_matrix(np.on
    ...: es((3,10)))))
Out[32]: 
<4x10 sparse matrix of type '<class 'numpy.float64'>'
    with 39 stored elements in Compressed Sparse Row format>
In [33]: np.concatenate((sparse.csr_matrix(np.arange(10)).A,np.ones((3,10))))
Out[33]: 
array([[0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])