随机矩阵单位化

随机矩阵单位化

方法一.   A=A*diag(1./sqrt(diag(A'*A)));

例子.A =

   0.1253   -1.1465    1.1892

   0.2877    1.1909   -0.0376

1.        A'*A =

   0.0985    0.1989    0.1382

   0.1989    2.7327   -1.4082

   0.1382   -1.4082    1.4155

2.        >> diag(A'*A)=

   0.0985

   2.7327

   1.4155

3.        >> sqrt(diag(A'*A))=

   0.3138

   1.6531

   1.1898

4.        >> 1./ sqrt(diag(A'*A))=

   3.1868

   0.6049

   0.8405

5.        >> diag(1./ sqrt(diag(A'*A)))

   3.1868         0         0

        0    0.6049         0

        0         0    0.8405

6.        B=A* diag(1./ sqrt(diag(A'*A)));此时B’*B对角线元素等于1,表明B的3个列向量已经单位化,即列向量的2范数等于1;但B的行向量不满足这个性质。

B =

    0.3994  -0.6935    0.9995

    0.9168   0.7204   -0.0316

B'=

    0.3994   0.9168

   -0.6935   0.7204

    0.9995  -0.0316

>>B'*B

ans =

    1.0000   0.3835    0.3702

    0.3835   1.0000   -0.7160

    0.3702  -0.7160    1.0000

 B*B'

ans =

    1.6395  -0.1651

       -0.1651   1.3605

方法二、针对每一个列向量进行

A =

    0.1253  -1.1465    1.1892

    0.2877   1.1909   -0.0376

1.        sqrt(sum(A(:,:).^2))=

    0.3138   1.6531    1.1898

 

2.        >>1./sqrt(sum(A(:,:).^2))=

 

3.1868    0.6049    0.8405

3.        C=A*diag(1./sqrt(sum(A(:,:).^2)))

C =

 

    0.3994  -0.6935    0.9995

    0.9168    0.7204  -0.0316

4.        C=B,这时有C’*C对角线元素等于1.

### 使用NumPy生成随机矩阵 为了在Python中通过`numpy`库生成随机矩阵,可以利用多种函数来满足不同需。对于简单的随机数值填充矩阵而言,`np.random.rand()`是一个不错的选择,它能够基于给定形状创建一个由[0, 1)区间均匀分布的浮点数组成的数组[^3]。 如果希望得到具有标准正态(高斯)分布特性的随机数构成的矩阵,则应该选用`np.random.randn(d0, d1,..., dn)`,此命令会返回指定尺寸的标准正态分布样本值集合,其中均值为0而标准差等于1。 当目标是构建含有特定范围内整数元素的随机矩阵时,可调用`np.random.randint(low[, high], size=None)`方法实现这一目的。该指令允许设定上下限以及最终输出矩阵的具体大小,从而灵活控制所生成数据集的特点[^5]。 除了上述几种方式外,还有其他途径可用于构造更复杂的结构随机矩阵,比如正交矩阵或者带有特殊性质的数据表单等。针对创建随机正交矩阵的需,可以通过先建立一个任意实数矩阵再对其进行QR分解获取到一组相互垂直单位向量作为列向量组成的矩阵完成转换过程[^1]。 ```python import numpy as np def create_random_orthonormal_matrix(n): H = np.random.randn(n, n) Q, R = np.linalg.qr(H) return Q @ np.diag(np.sign(np.diag(R))) random_matrix_example = np.random.rand(3, 3) normal_distribution_matrix = np.random.randn(3, 3) integer_range_matrix = np.random.randint(1, 100, (3, 3)) orthogonal_matrix = create_random_orthonormal_matrix(3) print("Random Matrix:\n", random_matrix_example) print("\nNormal Distribution Matrix:\n", normal_distribution_matrix) print("\nInteger Range Random Matrix:\n", integer_range_matrix) print("\nOrthonormal Matrix:\n", orthogonal_matrix) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值