python用numpy随机产生矩阵_如何在python numpy中创建随机正交矩阵

使用numpy和scipy.linalg的qr函数,可以生成随机正交矩阵。通过QR分解高斯矩阵,得到的Q矩阵均匀分布于正交矩阵的流形上。然而,由于qr函数的限制,实际得到的Q可能不完全均匀分布。通过后乘随机酉对角矩阵,可以修正这个问题,确保生成的矩阵Q具有均匀分布的特征值相位。
摘要由CSDN通过智能技术生成

通过对n x n矩阵进行QR因式分解,得到一个随机n x n正交矩阵Q(均匀分布在n x n正交矩阵的流形上),矩阵元素i.i.d.平均0和方差1。下面是一个例子:import numpy as np

from scipy.linalg import qr

n = 3

H = np.random.randn(n, n)

Q, R = qr(H)

print (Q.dot(Q.T))[[ 1.00000000e+00 -2.77555756e-17 2.49800181e-16]

[ -2.77555756e-17 1.00000000e+00 -1.38777878e-17]

[ 2.49800181e-16 -1.38777878e-17 1.00000000e+00]]

编辑:(在@g的评论之后重新讨论这个答案)上面关于高斯矩阵的QR分解的声明提供了一个均匀分布(在所谓的Stiefel流形上)正交矩阵,这是由this reference的定理2.3.18-19提出的。注意,结果的陈述暗示了“类QR”分解,然而,与三角形矩阵R具有正元素。

显然,scipy(numpy)函数的qr函数不能保证R的正对角元素,相应的Q实际上是不均匀分布的。这已在this专著中观察到,第。4.6(讨论涉及到MATLAB,但我想MATLAB和scipy都使用相同的LAPACK例程)。提出了qr提供的矩阵Q是通过后乘随机酉对角矩阵来修改的。

下面我再现了上述参考文献中的实验,绘制了由qr提供的“直接”Q矩阵的特征值相位的经验分布(直方图),以及“修改”版本,其中可以看到修改版本确实具有统一的特征值相位,正如从统一的分布正交矩阵。from scipy.linalg imp

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值