我在将稀疏矩阵的转置与列向量相乘时遇到了速度问题。
我的代码中矩阵 A 为:
501×501 SparseMatrixCSC{Float64, Integer},存储了1501个条目
以下是用随机生成的
范围 (min … max): 350.083 μs … 9.066 ms ┊ GC (min … max): 0.00% … 95.44%
时间中位数: 361.208 μs ┊ GC 中位数: 0.00%
时间均值 ± σ: 380.269 μs ± 355.997 μs ┊ GC 均值 ± σ: 4.06% ± 4.15%
内存估计值:218.70 KiB,分配估计值:11736。 方法2
范围 (min … max): 87.375 μs … 210.875 μs ┊ GC (min … max): 0.00% … 0.00%
时间中位数: 88.542 μs ┊ GC 中位数: 0.00%
我的代码中矩阵 A 为:
501×501 SparseMatrixCSC{Float64, Integer},存储了1501个条目
以下是用随机生成的
f0 = rand(Float64,501,1)
进行乘法运算得到的结果:
方法1
A_tr = transpose(A)
@benchmark A_tr*f
BenchmarkTools.Trial: 10000次样本测试,1次评估。范围 (min … max): 350.083 μs … 9.066 ms ┊ GC (min … max): 0.00% … 95.44%
时间中位数: 361.208 μs ┊ GC 中位数: 0.00%
时间均值 ± σ: 380.269 μs ± 355.997 μs ┊ GC 均值 ± σ: 4.06% ± 4.15%
内存估计值:218.70 KiB,分配估计值:11736。 方法2
A_tr = Matrix(transpose(A))
@benchmark A_tr*f
BenchmarkTools.Trial: 10000次样本测试,1次评估。范围 (min … max): 87.375 μs … 210.875 μs ┊ GC (min … max): 0.00% … 0.00%
时间中位数: 88.542 μs ┊ GC 中位数: 0.00%
时间(平均值±σ):89.286 μs ± 3.266 μs ┊ 垃圾回收(平均值±σ):0.00% ± 0.00%
内存预估:4.06 KiB ,分配预估:1。
方法3
A_tr = sparse(Matrix(transpose(A)))
@benchmark A_tr*f
BenchmarkTools.Trial:9次评估的10000个样本。
范围(最小值...最大值):2.102μs…1.017ms ┊ 垃圾回收(最小值...最大值):0.00%…99.40%
时间(中位数):2.477μs ┊ 垃圾回收(中位数):0.00%
时间(平均值±σ):2.725μs ± 13.428μs ┊ 垃圾回收(平均值±σ):6.92% ± 1.41%
内存预估:4.06 KiB ,分配预估:1。
为什么方法1不能产生类似于方法3的性能?我可能缺少一些基本知识。
感谢您的帮助!