matlab随机生产对称矩阵,Python:如何使用Python生成随机稀疏对称矩阵?

如果您有scipy,可以使用sparse.random。下面的sprandsym函数生成一个稀疏随机矩阵X,取它的上半个三角形,并将它的转置相加,形成一个对称矩阵。因为这会使对角线值加倍,所以对角线将被减去一次。在

非零值正态分布为平均值0和标准差

共1页。Kolomogorov-Smirnov测试用于检查非零值是否

与正态分布图和直方图一致

QQ图也生成了可视化的分布。在import numpy as np

import scipy.stats as stats

import scipy.sparse as sparse

import matplotlib.pyplot as plt

np.random.seed((3,14159))

def sprandsym(n, density):

rvs = stats.norm().rvs

X = sparse.random(n, n, density=density, data_rvs=rvs)

upper_X = sparse.triu(X)

result = upper_X + upper_X.T - sparse.diags(X.diagonal())

return result

M = sprandsym(5000, 0.01)

print(repr(M))

# <5000x5000 sparse matrix of type ''

# with 249909 stored elements in Compressed Sparse Row format>

# check that the matrix is symmetric. The difference should have no non-zero elements

assert (M - M.T).nnz == 0

statistic, pval = stats.kstest(M.data, 'norm')

# The null hypothesis is that M.data was drawn from a normal distribution.

# A small p-value (say, below 0.05) would indicate reason to reject the null hypothesis.

# Since `pval` below is > 0.05, kstest gives no reason to reject the hypothesis

# that M.data is normally distributed.

print(statistic, pval)

# 0.0015998040114 0.544538788914

fig, ax = plt.subplots(nrows=2)

ax[0].hist(M.data, normed=True, bins=50)

stats.probplot(M.data, dist='norm', plot=ax[1])

plt.show()

318d27ad912108612f6b5b085a2df473.png

我用过

^{pr2}$

而不是result = (X + X.T)/2.0

因为我无法说服自己(X + X.T)/2.0中的非零元素具有正确的分布。首先,如果X是稠密的且正态分布,平均值为0,方差为1,即N(0, 1),那么{}就是{}。当然我们可以用result = (X + X.T)/sqrt(2.0)

相反。那么result就是N(0, 1)。但是还有另一个问题:如果X稀疏,那么在非零位置,X + X.T通常是正态分布的随机变量加零。除以sqrt(2.0)将使正态分布更接近于0,从而得到更紧密的峰值分布。随着X变得稀疏,这可能越来越不像正态分布。在

因为我不知道(X + X.T)/sqrt(2.0)生成什么分布,所以我选择复制X的上三角半部分(因此重复我所知道的正态分布的非零值)。在

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值