gpt4 book ai didi

python - 在 scipy.sparse 矩阵中找到第一个非零列

转载 作者:行者123 更新时间:2023-11-28 21:51:07 29 4
gpt4 key购买 nike

我正在寻找包含稀疏矩阵 (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 = 0D 将保持不变,因为第 0 列已经包含非零条目。

对 scipy.sparse 矩阵执行此操作的有效方法是什么?是否有 numpy.any()numpy.argmax() 函数的类似物?

最佳答案

使用csc 矩阵很容易找到非零列。

In [302]: arr=sparse.csc_matrix([[0,0,1,2],[0,0,0,2]])

In [303]: arr.A
Out[303]:
array([[0, 0, 1, 2],
[0, 0, 0, 2]])

In [304]: arr.indptr
Out[304]: array([0, 0, 0, 1, 3])

In [305]: np.diff(arr.indptr)
Out[305]: array([0, 0, 1, 2])

最后一行显示每列中有多少个非零项。

np.nonzero(np.diff(arr.indptr))[0][0] 将是该 diff 中第一个非零值的索引。

csr 矩阵上执行相同的操作以找到第一个非零行。

如果你愿意,我可以详细说明 indptr

关于python - 在 scipy.sparse 矩阵中找到第一个非零列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842497/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com