【发布时间】:2015-08-30 18:59:03
【问题描述】:
我正在寻找包含稀疏矩阵 (scipy.sparse.csc_matrix) 中非零元素的第一列。实际上,以i 开头的第一列包含一个非零元素。
这是某种类型的线性方程求解器的一部分。对于密集矩阵,我有以下内容:(相关行是pcol = ...)
import numpy
D = numpy.matrix([[1,0,0],[2,0,0],[3,0,1]])
i = 1
pcol = i + numpy.argmax(numpy.any(D[:,i:], axis=0))
if pcol != i:
# Pivot columns i, pcol
D[:,[i,pcol]] = D[:,[pcol,i]]
print(D)
# Result should be numpy.matrix([[1,0,0],[2,0,0],[3,1,0]])
以上内容应该交换第 1 列和第 2 列。如果我们改为设置 i = 0,则 D 不会更改,因为第 0 列已经包含非零条目。
对 scipy.sparse 矩阵执行此操作的有效方法是什么? numpy.any() 和 numpy.argmax() 函数有类似物吗?
【问题讨论】:
-
对否决票的解释会很好......
-
我没有对这个问题投票。但是您可以通过添加MVCE 来改进它并使其更容易回答。有关示例,请参阅 this recent question 或 this older question of mine。你在第二句话中的要求也很难理解,所以也许你也可以把它说得更清楚。
-
@YXD 谢谢,我试图让它更清楚。示例代码可以复制粘贴到 python 解释器中。
-
查看矩阵
indptr属性。对于csc,它指向连续列的开始。第一个大于 0 的值将是具有非零值的第一列。