创建对称矩阵(numpy)

对称(实对称)矩阵也即: XT=X

step 1:创建一个方阵

>>> import numpy as np
>>> X = np.random.rand(5**2).reshape(5, 5)
>>> X
array([[ 0.26984148,  0.25408384,  0.12428487,  0.0194565 ,  0.91287708],
       [ 0.31837673,  0.35493156,  0.74336268,  0.31810561,  0.04409245],
       [ 0.06644445,  0.8967897 ,  0.10990936,  0.05036292,  0.72581982],
       [ 0.94758512,  0.21375975,  0.36781736,  0.1633904 ,  0.36070709],
       [ 0.53263787,  0.18380491,  0.0225521 ,  0.91239367,  0.75521585]])

step 2:保留其上三角部分

>>> X = np.triu(X)
                                # 保留其上三角部分
>>> X
array([[ 0.26984148,  0.25408384,  0.12428487,  0.0194565 ,  0.91287708],
       [ 0.        ,  0.35493156,  0.74336268,  0.31810561,  0.04409245],
       [ 0.        ,  0.        ,  0.10990936,  0.05036292,  0.72581982],
       [ 0.        ,  0.        ,  0.        ,  0.1633904 ,  0.36070709],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.75521585]])    

step 3:将上三角”拷贝”到下三角部分

>>> X += X.T - np.diag(X.diagonal())
>>> X
array([[ 0.26984148,  0.25408384,  0.12428487,  0.0194565 ,  0.91287708],
       [ 0.25408384,  0.35493156,  0.74336268,  0.31810561,  0.04409245],
       [ 0.12428487,  0.74336268,  0.10990936,  0.05036292,  0.72581982],
       [ 0.0194565 ,  0.31810561,  0.05036292,  0.1633904 ,  0.36070709],
       [ 0.91287708,  0.04409245,  0.72581982,  0.36070709,  0.75521585]])

注意,要减去一次对角线上的元素。因为上三角cov,和下三角cov.T在进行相加时会把主对角线上的元素相加两次。

step 4:测试

>>> X.T == X
array([[ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True]], dtype=bool)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值