【发布时间】:2020-03-30 04:09:31
【问题描述】:
按照文档的建议,我尝试从(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 都会将它们转换为数组并在后台执行类似的操作,因此您没有理由不应该这样做不要尝试。 -
np.unique是 1d,因此处理这些 2d 坐标需要一些额外的努力。 -
没错,但是像this 这样的技巧使它变成了2D。
标签: python numpy scipy duplicates sparse-matrix