random.multivariate_normal和norm.rvs

2024-01-07 12:58

本文主要是介绍random.multivariate_normal和norm.rvs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

np.random.multivariate_normal方法用于根据实际情况生成一个多元正态分布矩阵,其在Python3中的定义如下:

def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None) 

其中mean和cov为必要的传参而size,check_valid以及tol为可选参数。

    mean:mean是多维分布的均值维度为1;

    cov:协方差矩阵,注意:协方差矩阵必须是对称的且需为半正定矩阵;

    size:指定生成的正态分布矩阵的维度(例:若size=(1, 1, 2),则输出的矩阵的shape即形状为 1X1X2XN(N为mean的长度))。

    check_valid:这个参数用于决定当cov即协方差矩阵不是半正定矩阵时程序的处理方式,它一共有三个值:warn,raise以及ignore。当使用warn作为传入的参数时,如果cov不是半正定的程序会输出警告但仍旧会得到结果;当使用raise作为传入的参数时,如果cov不是半正定的程序会报错且不会计算出结果;当使用ignore时忽略这个问题即无论cov是否为半正定的都会计算出结果。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 生成2个正态分布,第1个正态分布的均值mean为116.50,方差为sigma,也就是生成的数在以mean为中心,标准差为pow(sigma,1/2)附近分散分布
#第2个正态分布的均值mean为40.41,方差为sigma
#如果是2个正态分布,其实就是生成以点位中心,以标准差为半径的圆
sigma = 0.0015  #不理解
num = 1000  # 生成样本数
# 随机生成二维正态分布样本
mean = np.array([116.50, 40.41])
cov = np.array([[sigma, 0], [0, sigma]])
sample_ary = np.random.multivariate_normal(mean, cov, num)sample_ary_data=pd.DataFrame(sample_ary,columns=['lon','lat']) 
print(sample_ary_data)lon_mean=sample_ary_data['lon'].mean()
print("lon均值为",lon_mean)
print("lon协方差为",sum([(i-lon_mean)*(i-lon_mean) for i in sample_ary_data['lon'].values])/(len(sample_ary_data)-1))lat_mean=sample_ary_data['lat'].mean()
print("lat均值为",lat_mean)
print("lat协方差为",sum([(i-lat_mean)*(i-lat_mean) for i in sample_ary_data['lat'].values])/(len(sample_ary_data)-1))#lon lat的协方差
x=sample_ary_data['lon'].values
y=sample_ary_data['lat'].values
print(sum([(k[0]-lon_mean)*(k[1]-lat_mean) for k in zip(x,y)])/(len(sample_ary_data)-1))plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题-设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
ax=sample_ary_data.plot(kind='scatter', x="lon",y='lat',s=1,c='g',alpha = 0.7,figsize=(10,10))  #, marker='^'
plt.title('多元正态分布')
plt.show()

norm.rvs生成1个1维的正态分布 

from scipy.stats import norm  # 提供高斯噪声
LEN = len(sample_ary_data)
bias1 = norm.rvs(scale=1, size=2 * LEN)
std=sum([(i-0)*(i-0) for i in bias1])/(2 * LEN-1)
print(std)
plt.plot(bias1)

背景知识:

均值、方差、标准差、协方差,相关系数

 

标准差

协方差

相关系数:就是用X、Y的协方差除以X的标准差和Y的标准差。相关系数也可以看成协方差:一种剔除了两个变量量纲影响、标准化后的特殊协方差

 

 

这篇关于random.multivariate_normal和norm.rvs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579984

相关文章

Numpy random.random()函数补充

np.random.random() np.random.random()的作用是生成指定形状的均匀分布的值为[0,1)的随机数 参数为size,也就是用于指定的形状大小 import numpy as npprint(np.random.random(size=(2, 2)))# [[0.19671797 0.85492315]# [0.99609539 0.66437246]]

Midjourney 随机风格 (Style Random),开启奇幻视觉之旅

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:       Midjourney 最近推出了 "Style Random"(随机风格),这项功能可以让我们使用独特的随机 sref 代码创建图像,从而每次都能获得不同的美感。通过对这些功能的探索和尝试,我发现了一些很棒的风格,我很高兴能与大家分享,这样可以节省大家的时间,不用自己动手测试。在本文中,我将展示十个M

【HDU】 4067 Random Maze 费用流

Random Maze Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1114    Accepted Submission(s): 387 Problem Description In the game “A C

python random和numpy random

numpy是python的一个数值计算库,可是有许多语法和python不兼容。 比如python的random.randint(low,high)使用方法是返回[low,high]之间的整数,官方文档: random.randint(a, b) Return a random integer N such that a <= N <= b. 注意是两边都是闭区间,但在numpy中,rand

CSS-标准文档流(Normal Flow)

目录 1 定义2 脱离文档流3 相对定位文章参考 1 定义 文档流中:内联元素默认从左到右流,遇到阻碍或者宽度不够自动换行,继续按照从左到右的方式布局。块级元素单独占据一行,并按照从上到下的方式布局。 2 脱离文档流 文档一旦脱离文档流,则元素不再按照文档流的排列方式进行排列,如块级元素脱离文档流后,该块级元素不再接着上个元素从上到下排列,而是成为第一个元素,从顶部开始排列

取Random范围内的随机数

Random rand = new Random();        int m = rand.nextInt(); //int范围类的随机数        int n = rand.nextInt(100); //0-100范围内的随机数      包含0,不包含100.

Pytorch中不同的Norm归一化详细讲解

在做项目或者看论文时,总是能看到Norm这个关键的Layer,但是不同的Norm Layer具有不同的作用,准备好接招了吗?(本文结论全部根据pytorch官方文档得出,请放心食用) 一. LayerNorm LayerNorm的公示如下: y = x − E [ x ] Var ⁡ [ x ] + ϵ ∗ γ + β y=\frac{x-\mathrm{E}[x]}{\sqrt{\op

CV-CNN-2015:GoogleNet-V2【首次提出Batch Norm方法:每次先对input数据进行归一化,再送入下层神经网络输入层(解决了协方差偏移问题)】【小的卷积核代替掉大的卷积核】

GoogLeNet凭借其优秀的表现,得到了很多研究人员的学习和使用,因此GoogLeNet团队又对其进行了进一步地发掘改进,产生了升级版本的GoogLeNet。 GoogLeNet设计的初衷就是要又准又快,而如果只是单纯的堆叠网络虽然可以提高准确率,但是会导致计算效率有明显的下降,所以如何在不增加过多计算量的同时提高网络的表达能力就成为了一个问题。 Inception V2版本的解决方案就是修

NumPy(二):创建数组【生成固定范围的数组:arange、linspace】【生成0和1的数组:zeros()等】【从现有数组生成:array、asarray】【生成随机数组:np.random】

生成0和1的数组 np.ones()np.ones_like()从现有数组中生成 np.array – 深拷贝np.asarray – 浅拷贝 生成固定范围数组 np.linspace() nun – 生成等间隔的多少个 np.arange() step – 每间隔多少生成数据 np.logspace() 生成以10的N次幂的数据 生成随机数组 正态分布 里面需要关注的参数:均值:u

Redis的内存淘汰策略-allkeys-random

`allkeys-random` 策略简介 在 `allkeys-random` 策略下,当 Redis 的内存使用达到配置的上限(`maxmemory`)时,它会随机选择一个键进行删除,直到释放足够的内存。这个策略的核心特征是其简单性和低计算开销,因为它不需要跟踪每个键的使用频率或最近访问时间。 这种策略适用于以下场景: - 不关心具体删除哪个键的应用场景。 - 数据访问模式不固定,所有