我有一个非常大的对称矩阵,称为M
。矩阵的大小M
为 1000000 * 1000000。令表示 矩阵 的第 行和第 列的M[i,j]
元素。对称矩阵的上三角部分保存为名为 的向量。。我有三个问题。i
j
M
M
V
V = [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。M
W
(3) 如何高效地转换V
为对称矩阵的下三角部分M
?我的意思是转换V
为另一个矩阵Q
。的下三角部分与 中的其他元素Q
相同,均为 0。M
Q
在这种情况下,最有效的创建方法M
是使用自定义类型<:AbstractMatrix
. 这应该几乎是零开销并且不使用额外的内存。
类型类似于:
struct MyMatrix{S, T<:AbstractVector{S}} <: AbstractMatrix{S}
v::T
end
Run Code Online (Sandbox Code Playgroud)
(我省略了一个构造函数,它应该检查长度是否v
匹配某些方阵的“一半”)
然后您应该为您的类型定义适当的方法。它们的列表在 Julia 手册中给出(并且根据您想要的矩阵的确切类型,它们应该以不同的方式实现)。该部分有一个如何实现此类对象的示例。