Python使用numpy包与matplotlib包选择随机点

1.相关函数介绍:

multivariate_normal函数说明:用于根据实际情况生成一个多元正态分布矩阵。
1.函数定义为:def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None)
2.参数说明:其中mean和cov为必要的传参而size,check_valid以及tol为可选参数。
    mean:mean是多维分布的均值,维度为1,例如[0,0]说明生成一个多元正态分布矩阵(一维)行均值为0,(二维)列均值为0;
    cov:协方差矩阵(协方差基本概念戳这里),注意:协方差矩阵必须是对称的且需为半正定矩阵;
    size:指定生成的正态分布矩阵的维度(例:若size=(1, 1, 2),则输出的矩阵的shape即形状为 1X1X2XN(N为mean的长度))。
    check_valid:这个参数用于决定当cov即协方差矩阵不是半正定矩阵时程序的处理方式。
     它一共有三个值:warn,raise以及ignore。当使用warn作为传入的参数时,如果cov不是半正定的程序会输出警告但仍旧会得到结果;
     当使用raise作为传入的参数时,如果cov不是半正定的程序会报错且不会计算出结果;
     当使用ignore时忽略这个问题即无论cov是否为半正定的都会计算出结果。
np.random.choice函数说明:是从a(例如:a=5,即为0-5) 中以概率P,随机选择3个, p没有指定的时候相当于是一致的分布。
replace 代表的意思是抽样之后还放不放回去,如果是False的话,那么出来的三个数都不一样,如果是
True的话, 有可能会出现重复的,因为前面的抽的放回去了。
例如:a1 = np.random.choice(a=5, size=3, replace=False, p=None)
      print(a1)
      非一致的分布,会以多少的概率提出来
      a2 = np.random.choice(a=5, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])
      print(a2)

2.示例代码

# -*- coding:utf8 -*-
"""选择随机点"""

import numpy as np
import matplotlib.pyplot as plt

# 生成一个多元正态分布矩阵(100*2的矩阵)
mean = [0,0]
cov = [[1,2],[2,5]]
x=np.random.multivariate_normal(mean, cov, 100)
#multivariate_normal函数说明:用于根据实际情况生成一个多元正态分布矩阵
#def multivariate_normal(mean, cov, size=None, check_valid=None, tol=None)
# 其中mean和cov为必要的传参而size,check_valid以及tol为可选参数。
# mean:mean是多维分布的均值,维度为1,例如[0,0]说明生成一个多元正态分布矩阵(一维)行均值为0,(二维)列均值为0;
# cov:协方差矩阵(协方差基本概念戳这里),注意:协方差矩阵必须是对称的且需为半正定矩阵;
# size:指定生成的正态分布矩阵的维度(例:若size=(1, 1, 2),则输出的矩阵的shape即形状为 1X1X2XN(N为mean的长度))。
# check_valid:这个参数用于决定当cov即协方差矩阵不是半正定矩阵时程序的处理方式,
# 它一共有三个值:warn,raise以及ignore。当使用warn作为传入的参数时,如果cov不是半正定的程序会输出警告但仍旧会得到结果;
# 当使用raise作为传入的参数时,如果cov不是半正定的程序会报错且不会计算出结果;
# 当使用ignore时忽略这个问题即无论cov是否为半正定的都会计算出结果。

# 画图(散点图)
# x[:, 0]取到数组第一列为点的横坐标
# x[:, 1]取到数组第二列为点的横坐标
plt.scatter(x[:, 0], x[:, 1]) # scatter:绘制散点图的函数
# 展示图片(散点图)
plt.show()

# 随机生成20个元素的数组
indices = np.random.choice(x.shape[0], 20, replace=False)# x.shape[0]取x数组的行数;x.shape[1]取x数组的列数
# np.random.choice参数意思分别 是从a(例如:a=5,即为0-5) 中以概率P,随机选择3个, p没有指定的时候相当于是一致的分布
# a1 = np.random.choice(a=5, size=3, replace=False, p=None)
# print(a1)
# 非一致的分布,会以多少的概率提出来
# a2 = np.random.choice(a=5, size=3, replace=False, p=[0.2, 0.1, 0.3, 0.4, 0.0])
# print(a2)
# replace 代表的意思是抽样之后还放不放回去,如果是False的话,那么出来的三个数都不一样,如果是
# True的话, 有可能会出现重复的,因为前面的抽的放回去了。

# 从x中选出这20行
selection = x[indices] # 花哨的索引,当x为二维数组时正常取值为x[行号,列号],若只写了x[行数组]代表去对应行的所有列
# 标记处这20个点
plt.scatter(x[:, 0], x[:, 1], alpha=0.6)# alpha为散点图像颜色,数值越大颜色越深
plt.scatter(selection[:, 0], selection[:, 1],
facecolor='none', edgecolor='b', s=200)
# 展示图片(随机选点)
plt.show()

3.输出结果

散点图

2.随机选点图

喜欢我的文章希望和我一起成长的宝宝们,可以搜索并添加公众号TryTestwonderful ,或者扫描下方二维码添加公众号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半夏映浮光

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

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

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

打赏作者

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

抵扣说明:

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

余额充值