1k5*_*1k5 2 python numpy scipy
我正在寻找稀疏矩阵(scipy.sparse.csc_matrix)中包含非零元素的第一列.实际上,第一列以i-th 开头,包含非零元素.
这是某种线性方程求解器的一部分.对于密集矩阵,我有以下内容:(相关行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]])
Run Code Online (Sandbox Code Playgroud)
上面应该交换第1列和第2列.如果我们设置i = 0,D则保持不变,因为第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])
Run Code Online (Sandbox Code Playgroud)
最后一行显示每列中有多少非零项.
np.nonzero(np.diff(arr.indptr))[0][0] 将是该差异中第一个非零值的索引.
在csr矩阵上执行相同操作以查找第一个非零行.
indptr如果你愿意,我可以详细说明.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |