我尝试按照文档所建议的方法,从一个包含(data, (rows, cols))
值的列表中初始化csc_matrix
和csr_matrix
。
sparse = csc_matrix((data, (rows, cols)), shape=(n, n))
问题是,我用于生成data
、rows
和cols
向量的方法会为某些点引入重复项。默认情况下,scipy将添加重复条目的值。然而,在我的情况下,对于给定的(row,col)
,这些重复项在data
中具有完全相同的值。
我想要达到的目标是让scipy忽略第二个条目(如果已经存在一个),而不是将它们相加。
假设我无法改进生成算法以避免生成重复项,是否有参数或其他创建稀疏矩阵的方式可以忽略重复项?
目前,具有data = [4,4]; cols = [1,1]; rows = [1,1];
的两个条目生成一个稀疏矩阵,该矩阵在(1,1)
处的值为8
,而期望的值为4
。
>>> c = csc_matrix(([4, 4], ([1,1],[1,1])), shape=(3,3))
>>> c.todense()
matrix([[0, 0, 0],
[0, 8, 0],
[0, 0, 0]])
我也知道可以使用二维numpy的unique
函数来过滤它们,但是列表非常大,所以这不是一个有效的选项。
其他可能的答案是什么:有没有办法指定如何处理重复项?例如保留min
或max
而不是默认的sum
?
np.unique
:无论你的列表有多大,scipy 都会将它们转换为数组并在幕后执行类似的操作,因此你应该尝试使用它。 - Jaimenp.unique
是一维的,因此处理这些二维坐标需要额外的努力。 - hpaulj