Numpy常用random随机函数_numpy random-程序员宅基地

技术标签: Python编程掌握指南  python  数据分析  numpy  

前言:

在现代数据科学和机器学习领域,随机性是解决许多问题的关键。而NumPy作为Python中一流的科学计算库,其强大的随机函数模块为我们提供了丰富的工具,用以模拟实验、生成数据或执行随机抽样。本文将深入探讨NumPy中常用的随机函数,为你揭示其背后的原理以及如何在数据科学项目中充分利用这些功能。无论你是新手还是经验丰富的开发者,本文都将帮助你更好地理解和应用NumPy的随机函数,为你的项目注入新的活力。

在这里插入图片描述

Numpy常用random随机函数

seed 向随机数生成器传递随机状态种子

只要random.seed( * ) seed里面的值一样,那随机出来的结果就一样。所以说,seed的作用是让随机结果可重现。也就是说当我们设置相同的seed,每次生成的
随机数相同。如果不设置seed,则每次会生成不同的随机数。使用同一个种子,每次生成的随机数序列都是相同的。

import random
random.seed(10)
print(random.random()) # random.random()用来随机生成一个0到1之间的浮点数,包括零。
print(random.random())
print(random.random()) # 这里没有设置种子,随机数就不一样了

在这里插入图片描述

注意:这里不一定就写10,你写几都行,只要写上一个整数,效果都是一样的,写0都行,但是不能为空,为空就相当于没有用seed
seed只限在这一台电脑上,如果换台电脑值就变了

rand 返回[0,1]之间,从均匀分布中抽取样本

import numpy as np
一维 = np.random.rand(3)
print(一维)
print('-'*30)
二维 = np.random.rand(2,3)
print(二维)
print('-'*30)
三维 = np.random.rand(2,3,4)
print(三维)

在这里插入图片描述
我们数据分析的三部曲:Numpy、Pandas、matplotlib,后期我们在使用matplotlib画图时会用到均匀分布

import numpy as np
import matplotlib.pyplot as plt
# 绘制正弦曲线
x轴 = np.linspace(-10,10,100) # 在[-10,10]闭区间或半闭区间中,数量为100
y轴 = np.sin(x轴) # sin正弦、cos余弦
plt.plot(x轴,y轴)
plt.show()
#加入噪声后
import numpy as np
import matplotlib.pyplot as plt
# 绘制正弦曲线
x轴 = np.linspace(-10,10,100) # 在[-10,10]闭区间中,数量为100
y轴 = np.sin(x轴) + np.random.rand(len(x轴)) # 生成均匀分布,len(x轴)就是维度,相加就是定义元素的相加
plt.plot(x轴,y轴)
plt.show()

结果如图所示:
在这里插入图片描述
在这里插入图片描述

randn 返回标准正态分布随机数(浮点数)平均数0,方差1

randn生成一个从标准正态分布中得到的随机标量,标准正态分布即N(0,1)。
randn(n)和randn(a1,a2,…)的用法和rand相同

import numpy as np
一维 = np.random.randn(3)
print(一维)
print('-'*30)
二维 = np.random.randn(2,3)
print(二维)
print('-'*30)
三维 = np.random.randn(2,3,4)
print(三维)
print('-'*30)

在这里插入图片描述
正态分布
标准正态分布

randint 随机整数

import numpy as np
a = np.random.randint(3) 
print(f'随机0至3之间的整数是:{
      a}')
b = np.random.randint(1,10) 
print(f'随机1至10之间的整数是:{
      b}') 
c = np.random.randint(1,10,size=(5,))
print(f'随机1至10之间取5个元素组成一维数组{
      c}')
d = np.random.randint(1,20,size=(3,4))
print(f'随机1至20之间取12个元素组成二维数组:\n{
      d}')
e = np.random.randint(1,20,size=(2,3,4))
print(f'随机1至20之间取24个元素组成三维数组:\n{
      e}')

random 生成0.0至1.0的随机数

import numpy as np
一维 = np.random.random(3)
print(f'生成3个0.0至1.0的随机数:\n{
      一维}')
二维 = np.random.random(size=(2,3))
print(f'生成2行3列共6个数的0.0至1.0的随机数:\n{
      二维}')
三维 = np.random.random(size=(3,2,3))
print(f'生成三块2行3列,每块6个数的0.0至1.0的随机数:\n{
      三维}')

choice 从一维数组中生成随机数

import numpy as np
# 第一参数是一个1维数组,如果只有一个数字那就看成range(5)
# 第二参数是维度和元素个数,一个数字是1维,数字是几就是几个元素
a = np.random.choice(5,3)
print(f'从range(5)中拿随机数,生成只有3个元素的一维数组是:{
      a}')
import numpy as np
b = np.random.choice(5,(2,3))
print(f'从range(5)中拿随机数,生成2行3列的数组是:\n{
      b}')
import numpy as np
c = np.random.choice([1,2,9,4,8,6,7,5],3)
print(f'从[1,2,9,4,8,6,7,5]数组中拿随机数,3个元素:{
      c}')
import numpy as np
d = np.random.choice([1,2,9,4,8,6,7,5],(2,3))
print(f'从[1,2,9,4,8,6,7,5]数组中拿随机数,生成2行3列的数组是:\n{
      d}')

shuffle(数组)把一个数进行随机排列

import numpy as np
一维数组 = np.arange(10)
print(f'没有随机排列前的一维数组{
      一维数组}')
np.random.shuffle(一维数组)
print(f'随机排列后的一维数组{
      一维数组}')

在这里插入图片描述

import numpy as np
二维数组 = np.arange(20).reshape(4,5)
print(f'没有随机排列前的二维数组\n{
      二维数组}\n')
np.random.shuffle(二维数组)
print(f'随机排列后的二维数组\n{
      二维数组}')

在这里插入图片描述

***注意:多维数组随机排列只按行随机,列是不变的


import numpy as np
三维数组 = np.arange(12).reshape(2,2,3)
print(f'没有随机排列前的三维数组\n{
      三维数组}\n')
np.random.shuffle(三维数组)
print(f'随机排列后的三维数组\n{
      三维数组}')

在这里插入图片描述

permutation(数组) 把一个数组随机排列或者数字全排列

import numpy as np
# 与上面讲的np.random.shuffle(一维数组)效果一样,就是把一维数组重新排序了
排列 = np.random.permutation(10) # 这里的10就看成是range(10)
print(排列)
import numpy as np
二维数组 = np.arange(9).reshape((3,3))
print(f'没有随机排列前的二维数组是\n{
      二维数组}\n')
排序后 = np.random.permutation(二维数组)
print(f'随机排列后的二维数组是\n{
      排序后}\n')
print(f'看一下原来的二维数组变了吗?\n{
      二维数组}')

normal 生成正态分布数字

正态分布,又叫常态分布,又叫高斯分布
normal [平均值,方差,size]

import numpy as np
数组 = np.random.normal(1,10,10) # 平均值1,方差10,10个数
print(数组)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
高斯分布重要量的性质
1. 密度函数关于平均值对称
2. 平均值是它的众数(statistical mode)以及中位数(median)
3. 函数曲线下68.268949%的面积在平均值左右的一个标准差范围内
4. 95.449974%的面积在平均值左右两个标准差2σ的范围内
5. 99.730020%的面积在平均值左右三个标准差3σ的范围

uniform 均匀分布

import numpy as np
数组 = np.random.uniform(1,10,10)
print(f'在1到10之间生成10个随机数:\n{
      数组}')
import numpy as np
数组 = np.random.uniform(1,10,(2,3))
print(f'在1到10之间生成2行3列共计6个随机数:\n{
      数组}')

结尾:

在数据科学的世界里,随机性是不可避免的,而NumPy的random模块为我们提供了一个强大而灵活的工具箱,使我们能够在实验和模拟中更好地模拟真实世界的复杂性。通过本文的学习,你已经了解了NumPy中常用的随机函数,从简单的随机数生成到更复杂的分布抽样,这些功能将在你的项目中大有裨益。随机性可能是不可预测的,但通过掌握NumPy的随机函数,你可以在你的数据科学旅程中更加从容地面对这个变幻莫测的世界。让我们一起深入研究NumPy的random模块,为数据科学的未知领域打开新的大门。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_66106755/article/details/128725290

智能推荐

新手前端微信小程序img图片无法显示问题_微信小程序js引入图片前端不显示-程序员宅基地

文章浏览阅读2.5w次,点赞21次,收藏23次。最近自己在做毕设,是一个微信小程序,虽然自己有一点前端开发经验,以为小程序前端和这个差不多可以直接开撸,但是这两天被一些图片问题烦了好久。这也是自己第一次写博客,实在太生气了,网上也没找到自己想要的结果,所以写下来记录下来,顺便让和我一样错误的人知道咋解决,笑cry,虽然真的很低级的错误。以下是遇到的问题。 1:在开发者工具可以显示图片,手机预览,真机调试却看不到。 2:在最开始的ipho..._微信小程序js引入图片前端不显示

JSON百科全书:学习JSON看这一篇就够了-程序员宅基地

文章浏览阅读2.8k次,点赞10次,收藏51次。JSON 对象包含两个方法:用于解析 JavaScript Object Notation(JSON)的 parse() 方法,以及将对象/值转换为 JSON 字符串的 stringify() 方法。除了这两个方法,JSON 这个对象本身并没有其他作用,也不能被调用或者作为构造函数调用。_json

【电子基础】总结·嵌入式硬件基础_哈佛j80c电源板-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏9次。嵌入式系统硬件基础By 成鹏致远第一章 常用硬件——>嵌入式系统常用的硬件器件,主要包括分立器件、光电半导体、逻辑IC、模拟IC以及存储器共五大类——>分立器件主要有:二极管、三极管、电阻、电容、电感以及场效应管等——>二极管的主要特性是单向导电性——>二极管按其用途可分为:整流二极管、稳压二极管、开关二极管、发光二极管等——>整流二级管是一种将交流电转变为直流电的半导体器件,主要用于各种低频整流_哈佛j80c电源板

组件三大属性,state,props,refs_组件自带的属性-程序员宅基地

文章浏览阅读673次。一,组件实例三大属性(1)state查看状态:在写好的组件实例上有一个属性,state,就代表这个组件的状态。接下来我们写一个有状态的组件:<body> <div id="test"></div> <script type="text/babel"> // 创建组件 class Component extends React.Component { // 初始化,调_组件自带的属性

yii2框架-yii2的组件和服务定位器(四)_yii2 unknown component id: db-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏4次。上一节主要是分析了yii2的自动加载函数,下面在分析一下yii2的核心组件与服务定位器。其实yii2的核心组件主要有以下://日志组件'log' => ['class' => 'yii\log\Dispatcher'],//视图组件,这个组件代表视图文件中的$this'view' => ['class' => 'yii\web\View'],//格式化组件,将一些输出按照一_yii2 unknown component id: db

SystemVerilog总结_systemverilog语法-程序员宅基地

文章浏览阅读6.9k次,点赞24次,收藏315次。基于SV绿皮书的systemverilog总结_systemverilog语法

随便推点

nginx + lua + redis 防刷和限流_nginx + lua + redis 限速带宽-程序员宅基地

文章浏览阅读3.1w次,点赞8次,收藏46次。防刷和限流的概念是:防刷的目的是为了防止有些IP来爬去我们的网页,获取我们的价格等信息。不像普通的搜索引擎,这种爬去行为我们经过统计最高每秒300次访问,平均每秒266次访问。由于我们的网站的页面都在CDN上,导致我们的CDN流量会定时冒尖。为了防止这种情况,打算将网页页面的访问从CDN切回主站。同时开启防刷功能,目前设置一秒200次访问即视为非法,会阻止10分钟的访问。限流的目的_nginx + lua + redis 限速带宽

hive 窗口函数总结及使用案例_hive 窗口函数的执行顺序-程序员宅基地

文章浏览阅读700次。1. 窗口函数和普通聚合函数的区别聚合函数是将多条记录合并为一条;窗口函数是每条记录都会执行,原来有几条记录最终执行完还是几条聚合函数也可以用于窗口函数:窗口函数在逻辑上的执行顺序是在FROM、JOIN、WHERE、GROUP BY 、HAVING 之后,在ORDER BY、LIMIT、SELECT DISTINCT之前。它执行之前GROUP BY的聚合过程已经完成了,所以不会再产生数据聚合。注:窗口函数是在 WHERE 之后执行的,所以如果 WHERE 子句需要用窗口函数作为条件,需要多套一层子_hive 窗口函数的执行顺序

Windows11 - 使用 sftp连接 CentOS 7,实现文件上传与下载_windows连接sftp-程序员宅基地

文章浏览阅读4.3k次。Windows11 -使用sftp连接CentOs 7,实现文件上传与下载_windows连接sftp

gflags的交叉编译_manually-specified variables were not used by the -程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏9次。gflags版本:gflags 2.2.2目录编译动态库的编译cmakelbw@DESKTOP-LBW22:/mnt/d/ref/gflags-master/_build$ cmake .. -DGFLAGS_NAMESPACE=gflags -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-li._manually-specified variables were not used by the project:

SpringBoot mysql 时区问题总结_servertimezone=gmt+8-程序员宅基地

文章浏览阅读1.6k次。寻找原因后端开发中经常mysql8.x的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。_servertimezone=gmt+8