如何在Julia中生成任意维度的对称矩阵?
Julia中生成任意阶对称矩阵的方法
Julia没有和rand(m,n)一样直接返回随机对称矩阵的顶层基础函数,但靠标准库自带的工具就能零成本实现任意维度对称矩阵的生成,完全不需要装第三方包:
- 核心是
LinearAlgebra标准库里的Symmetric类型,只要传入一个n阶方阵,它就会自动基于指定三角区的元素做镜像,返回严格满足A[i,j] == A[j,i]的对称矩阵对象,不会出现手动拼矩阵时的浮点误差问题,做线性代数运算时还会自动走对称矩阵的专属优化路径,性能比手动构造的对称矩阵好很多。
最常用的均匀分布随机对称矩阵写法:
using LinearAlgebra # n可以替换为任意正整数,对应要生成的对称矩阵阶数 n = 5 random_sym = Symmetric(rand(n, n))
要换其他分布的话直接替换基础矩阵生成函数就行,比如生成标准正态分布的随机对称矩阵:
normal_sym = Symmetric(randn(n, n))
补充几个实用细节:
Symmetric构造出的是视图类型,不会额外复制一份完整矩阵,内存开销和普通n阶方阵差不多。如果需要拿到物理存储了全部对称元素的普通Matrix类型,直接做一次转换即可:Matrix(Symmetric(rand(n,n)))- 要生成对称正定、对称稀疏等特殊属性的对称矩阵,只需要把传入的基础方阵换成对应逻辑生成的方阵,再套
Symmetric封装就行,支持任意合法阶数,没有维度限制。 - 注意对称矩阵本身是二维方阵的概念,如果需要的是更高维度的对称张量,标准库没有内置对应构造方法,需要用专门的张量计算包实现。
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

