关于稀疏矩阵的转置


#1

对于Julia1.0,稀疏矩阵用transpose()或 ‘ 进行转置或复共轭转置后,不,再是稀疏矩阵。请问对于稀疏矩阵转置如果还想得到稀疏矩阵,是不是只能用sparse(transpose())的形式?


#2

看上去这个问题还处于 issue 阶段,估计只能先这样凑和着用了。


#3

多谢多谢,等更新


#4

transpose在1.0里是lazy的,不会进行任何实际的计算。当你transpose的时候,实际上只是标记了一下这个矩阵被transpose,它依然是稀疏矩阵:

julia> A = sprand(10, 10, 0.1)
10×10 SparseMatrixCSC{Float64,Int64} with 9 stored entries:
  [1 ,  1]  =  0.0428796
  [6 ,  1]  =  0.875442
  [8 ,  2]  =  0.509977
  [4 ,  7]  =  0.750717
  [9 ,  8]  =  0.0288871
  [3 , 10]  =  0.358994
  [7 , 10]  =  0.325388
  [8 , 10]  =  0.0234605
  [9 , 10]  =  0.242226

julia> transpose(A)
10×10 LinearAlgebra.Transpose{Float64,SparseMatrixCSC{Float64,Int64}}:
 0.0428796  0.0  0.0       0.0       0.0  0.875442  0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.509977   0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.750717  0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0288871  0.0
 0.0        0.0  0.0       0.0       0.0  0.0       0.0       0.0        0.0        0.0
 0.0        0.0  0.358994  0.0       0.0  0.0       0.325388  0.0234605  0.242226   0.0

注意上面的类型

然后如果不信可以copy一下被转置的矩阵,这个时候会执行计算,你会得到一个稀疏矩阵。这个只是打印的问题。