Python 整数列表中的Scipy稀疏数组

Python 整数列表中的Scipy稀疏数组,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,我有一个整数列表(实际上是一个熊猫系列),我想将其转换为稀疏矩阵,对于该矩阵,行I在j处只有一个非零值,该索引由列表的I第个元素定义。有点像问题中提到的: 现在,我首先将数据转换为密集矩阵,如下所示: def cat_to_mat(c, mat_length): res = np.zeros((len(c), mat_length)) res[np.arange(len(c)), c.values % mat_length] = 1 return res 然后我对结果数

我有一个整数列表(实际上是一个熊猫系列),我想将其转换为稀疏矩阵,对于该矩阵,行
I
j
处只有一个非零值,该索引由列表的
I
第个元素定义。有点像问题中提到的:

现在,我首先将数据转换为密集矩阵,如下所示:

def cat_to_mat(c, mat_length):
    res = np.zeros((len(c), mat_length))
    res[np.arange(len(c)), c.values % mat_length] = 1
    return res
然后我对结果数组调用
csr\u矩阵
。然而,生成一个密集的矩阵并扔掉其中的大部分元素似乎是一种浪费


我知道像
sklearn.preprocessing.onehotcoder
这样的工具,但它们并不真正适合,因为我想避免调用
fit()
方法:我想确保数据的(稀疏)表示只取决于
c
mat\u长度
(而不是以前提供给OneHotEncoder的一些数据)

似乎很简单。我是否误解了这个问题

from scipy import sparse

def cat_to_mat(c, mat_length):
    return sparse.csc_matrix((c, (len(c), c % mat_length)), shape=(len(c), mat_length))

不,这很好,我不熟悉这些矩阵的构造函数……我应该从那里开始,谢谢:)