如文档所示,我试图从(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]])
我也知道,我可以用一个2维numpy的unique
功能进行筛选,但名单是相当大的,所以这是不是一个真正的有效选项。
问题的其他可能的答案:有没有任何方式指定如何处理重复?即保留min
或max
而不是默认的sum
?
我很确定答案是否定的,没有内置的方式来改变重复的行为。尽管如此,你不应该太过放弃使用'np.unique':无论你的列表有多大,scipy都会将它们转换为数组,并在引擎盖下做类似的操作,所以你没有理由不应该尝试。 – Jaime 2015-02-23 16:53:40
'np.unique'是1d,因此处理这些2d坐标需要一些额外的努力。 – hpaulj 2015-02-23 20:51:08
是的,但是像[这个](http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array)这样的技巧使它成为2D。 – 2015-02-23 21:02:44