如何将向量从上三角矩阵转移到原始对称矩阵?

Miz*_*zle 5 julia

我有一个非常大的对称矩阵,称为M。矩阵的大小M为 1000000 * 1000000。令表示 矩阵 的第 行和第 列的M[i,j]元素。对称矩阵的上三角部分保存为名为 的向量。。我有三个问题。ijMMVV = [M[1,1], M[1,2], M[2,2], M[1,3], M[2,3], M[3,3], M[1,4], M[2,4], M[3,4], M[4,4] ,..., M[1000000, 1000000]]

(1)如何V高效转换M

(2)如何高效地转换V为对称矩阵的上三角部分M?我的意思是转换V为另一个矩阵W。的上三角部分与 中的其他元素W相同,均为 0。MW

(3) 如何高效地转换V为对称矩阵的下三角部分M?我的意思是转换V为另一个矩阵Q。的下三角部分与 中的其他元素Q相同,均为 0。MQ

Bog*_*ski 1

在这种情况下,最有效的创建方法M是使用自定义类型<:AbstractMatrix. 这应该几乎是零开销并且不使用额外的内存。

类型类似于:

struct MyMatrix{S, T<:AbstractVector{S}} <: AbstractMatrix{S}
    v::T
end
Run Code Online (Sandbox Code Playgroud)

(我省略了一个构造函数,它应该检查长度是否v匹配某些方阵的“一半”)

然后您应该为您的类型定义适当的方法。它们的列表在 Julia 手册中给出(并且根据您想要的矩阵的确切类型,它们应该以不同的方式实现)。该部分有一个如何实现此类对象的示例。