假设我有一个列表列表,其中每个子列表包含要设置为1的连续行的列索引。
indices = [[1,43,243],[2,34,276],...]
我的目的是设置符合给定索引的scipy稀疏矩阵的值。
例如:
对于第一行1,43,243,列需要设置为1 对于第二行2,34,276,列需要设置为1
如果这是一个愚蠢的问题,对不起。我只是一个从Matlab过渡到scipy的初学者。
答案 0 :(得分:0)
一些sparse
矩阵类型将起作用。来自sparse.csr_matrix
文档:http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html
>>> row = array([0,0,1,2,2,2])
>>> col = array([0,2,2,0,1,2])
>>> data = array([1,2,3,4,5,6])
>>> csr_matrix( (data,(row,col)), shape=(3,3) ).todense()
matrix([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
coo_matrix
也会接受此(data,(row,col))
输入
Matlab提供了一种创建稀疏矩阵的类似方法,完成了有关添加重复条目的业务(请参阅coo_matrix
文档底部的注释)。
我认为你想构建
row = array([0,0,0, 1,1,1,2,2,2,....])
col = array([1,43,243, 2,34,276,,...])
# col = col-1 # to change to 0 based indexing?
data = array([1,1,1,...])
例如:
np.array(indices).ravel()
# array([ 1, 43, 243, 2, 34, 276])
np.arange(2).repeat(3)
# array([0, 0, 0, 1, 1, 1])
np.ones(6)
# array([ 1., 1., 1., 1., 1., 1.])