pytorch基本运算-torch.normal()函数输出多维材料时,如何绘制正态分布函数图

news/2025/9/30 19:40:48/文章来源:https://www.cnblogs.com/lxjshuju/p/19121701

【1】引言

前序学习进程中,已经对使用PyTorch模块的normal()函数绘制正态分布函数图进行了初步探索。
但很显然,这里的探索只是让torch.normal()函数生成了满足正态分布的一维数据。
但实际上torch.normal()函数可以生成多维度的正态分布随机数,此时应该如何绘制随机数分布图,这就是本次学习的目标。

【2】 torch.normal()函数生成正态分布随机数

首先用torch.normal()函数生成不同维度的随机数,这里给出完整代码:

# 引入模块
import torch
# 生成一维正态分布随机数
x1=torch.normal(0,1,(12,))
print('x1=',x1)
# 生成二维正态分布随机数
x2=torch.normal(0,1,(2,6))
print('x2=',x2)
# 生成三维正态分布随机数
x3=torch.normal(0,1,(2,2,3))
print('x3=',x3)

这里使用了torch.normal()函数分别生成了一维、二维和三维的正态分布随机数,由于多维数据数据确实不方便直接绘图,但我们可以抓住这些数据全部符合正态分布的特点,先将它们还原成一维数据,然后再用绘制概率密度分布图的hist()函数直接绘图。
此时代码运行,获得的随机数效果为:

x1= tensor([-2.1645, -0.4632, 1.1806, 0.0278, 0.1265, 1.4797, 0.6780, -0.4628,
-0.3890, -0.2532, -0.7040, 0.1115])
x2= tensor([[-0.8097, 1.0254, -1.8906, -0.6937, -0.1433, 0.4527],
[ 0.3353, -0.7879, -1.2921, 1.3192, -2.2811, -1.7203]])
x3= tensor([[[ 1.5328, -1.0825, 0.5024],
[ 0.6801, -1.3820, -0.2212]],
[[ 1.1011, 0.7533, -1.2041],
[ 0.0494, 1.7353, -1.0647]]])

【3】flatten()函数将torch.normal()函数生成正态分布随机数展开为一维

flatten()函数可以直接将多维数组展平为一维,我们现在尝试将获得的正态分布随机数展平到一维。

# 引入模块
import torch
# 生成一维正态分布随机数
x1=torch.normal(0,1,(12,))
print('x1=',x1)
# 展平一维随机数
data1=x1.flatten()
print('data1=',data1)
# 生成二维正态分布随机数
x2=torch.normal(0,1,(2,6))
print('x2=',x2)
# 展平二维随机数
data2=x2.flatten()
print('data2=',data2)
# 生成三维正态分布随机数
x3=torch.normal(0,1,(2,2,3))
print('x3=',x3)
# 展平三维随机数
data3=x3.flatten()
print('data3=',data3)

代码运行后的效果为:

x1= tensor([ 0.0873, -1.9582, 0.3439, -0.9570, -0.4792, 1.0583, -0.4953, 1.1465,
-1.0765, 1.2814, 0.9600, 0.1369])
data1= tensor([ 0.0873, -1.9582, 0.3439, -0.9570, -0.4792, 1.0583, -0.4953, 1.1465,
-1.0765, 1.2814, 0.9600, 0.1369])
x2= tensor([[ 0.3837, 1.6751, -0.3105, -0.4903, 2.0563, 0.4885],
[ 0.5631, 0.1983, -0.7726, -0.4184, 0.1417, -0.5559]])
data2= tensor([ 0.3837, 1.6751, -0.3105, -0.4903, 2.0563, 0.4885, 0.5631, 0.1983,
-0.7726, -0.4184, 0.1417, -0.5559])
x3= tensor([[[ 0.7239, 1.1062, 0.3415],
[ 0.9239, -1.1035, -0.4100]],
[[-0.0320, 0.6664, -0.2891],
[ 0.6788, 1.5814, -1.9836]]])
data3= tensor([ 0.7239, 1.1062, 0.3415, 0.9239, -1.1035, -0.4100, -0.0320, 0.6664,
-0.2891, 0.6788, 1.5814, -1.9836])

【4】使用hist函数绘制torch.normal()函数生成正态分布随机数概率密度图

这时就可以用hist函数对torch.normal()函数生成正态分布随机数绘制概率密度图。

# 引入模块
import torch
import matplotlib.pyplot as plt
# 生成一维正态分布随机数
x1=torch.normal(0,1,(12,))
print('x1=',x1)
# 展平一维随机数
data1=x1.flatten()
print('data1=',data1)
plt.hist(data1.numpy(),bins=30,color='navy')
# 生成二维正态分布随机数
x2=torch.normal(0,1,(2,6))
print('x2=',x2)
# 展平二维随机数
data2=x2.flatten()
print('data2=',data2)
plt.hist(data2.numpy(),bins=30,color='green')
# 生成三维正态分布随机数
x3=torch.normal(0,1,(2,2,3))
print('x3=',x3)
# 展平三维随机数
data3=x3.flatten()
print('data3=',data3)
plt.hist(data3.numpy(),bins=30,color='red')
plt.show()

此时输出的效果图为:
在这里插入图片描述
由于数据不够多,尽管已经三组数据约定了三种颜色,但这个图依然没有明显的正态分布特征。
别急,可以尝试增加随机数,最简单的,直接对第三组数据加密:

# 生成三维正态分布随机数
x3=torch.normal(0,1,(20,20,30))
print('x3=',x3)
# 展平三维随机数
data3=x3.flatten()
print('data3=',data3)
plt.hist(data3.numpy(),bins=30,color='red')

之前的数据维度构成是(2,2,3),现在加密到了(20,20,30),看看实际效果:
在这里插入图片描述
由图可见非常明显的正态分布特征。
由于数据太多,第三组数据把前两组的数据覆盖了。
此外由于代码不够精简,为此我们想办法重新写一下代码,变成优化版本。

【4】代码优化

优化后的代码具备精简和一个大图展示每组数据分布特征的优点,直接给出完整代码:

# 引入模块
import torch
import matplotlib.pyplot as plt
from matplotlib.pyplot import subplots, ylabel
# 定义常数
x=[]
n=1200
for i in range(3):
# 先定义维度
if i==0:
size=(n,)
elif i==1:
size = (20,60)
else:
size = (20,20,30)
# 生成具体的随机数
tensor=torch.normal(0,1,size=size).flatten()#.numpy()
# x是一个空列表,使用append()函数往x中增加tensor随机数
x.append(tensor)
# 绘图
fig,ax=subplots(3,1)
for i in range(3):
ax[i].hist(x[i],bins=50,color=['navy', 'green', 'red'][i])
if i == 1:  # 仅第一个子图显示y轴标签(避免重复)
ax[i].set_ylabel('torch.normal', fontsize=12)
if i == 2:  # 仅第二个子图显示x轴标签(避免重复)
ax[i].set_xlabel('x', fontsize=12)
plt.show()

这里有一个重要的定义,首先约定随机数的维度:

for i in range(3):
# 先定义维度
if i==0:
size=(n,)
elif i==1:
size = (20,60)
else:
size = (20,20,30)
# 生成具体的随机数
tensor=torch.normal(0,1,size=size).flatten().numpy()

这里的size()按照维度提前定义好,所以不用每一处都单独定义。
然后是直接调用for循环沪指概率密度分布图:

# 绘图
fig,ax=subplots(3,1)
for i in range(3):
ax[i].hist(x[i],bins=50,color=['navy', 'green', 'red'][i])
if i == 1:  # 仅第一个子图显示y轴标签(避免重复)
ax[i].set_ylabel('torch.normal', fontsize=12)
if i == 2:  # 仅第二个子图显示x轴标签(避免重复)
ax[i].set_xlabel('x', fontsize=12)

这两条路逻辑很清晰,但还需要注意一个细节:

# 生成具体的随机数
tensor=torch.normal(0,1,size=size).flatten().numpy()
# x是一个空列表,使用append()函数往x中增加tensor随机数
x.append(tensor)

一个是将张量数据展平,需要注意的是,plt.hist()函数和张量是兼容的,所以tensor最后是否有numpy()都可以运行。
另一个是每一个张量都要通过append()函数直接添加到空列表x中。
此时的输出效果为:
在这里插入图片描述

【5】总结

学习了当torch.normal()函数输出多维数据式,如何绘制正态分布函数图的基本技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 神经网络工具箱全解析:从核心组件到模型实战 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做商城网站的项目背景电子上网站开发

输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例: 输入:s "abc" 输出:["abc","acb","bac","bca","…

音乐网站开发结语申泽seo

awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理,然后输出 awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’…

AT_agc035_c [AGC035C] Skolem XOR Tree

感觉每次遇到这种神秘构造都会跪下。 首先如果 \(n\) 为 \(2\) 的正整数次幂,由于第 \(n\) 位为 \(1\) 的只有一个数,显然会跪下。 然后我们通过构造证明除了这种情况都是有解的,分奇数和偶数考虑。 你考虑到一个性…

做网站的的需求文档成都公司网站设计

当我们在使用电脑时,时常可能会遇到各类系统提示的错误信息。"找不到mfc100.dll" 就是这些错误之一,该错误提示会妨碍我们执行一些应用程序或特定代码。为了帮助读者克服这个技术障碍,本篇文章将详尽阐明导致该问题的根本原因&…

网站开发人员职业分析做网站买好域名怎么办

Java 提供了一个操作 Set 、List 和 Map 等集合的工具类 :Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作 转载于:https://www.cnblogs.com/szj-ang/p/7383027.html

2025.9.30总结 - A

今天上午上的工程实训,学习了一些铁道基础常识,收获颇丰,还体验了驾驶动车,收益良多

Harbor磁盘空间清理指南:如何安全清理半年前的镜像 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:第14章 AI Agent——构建自主智能助理

详细介绍:第14章 AI Agent——构建自主智能助理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

网站建设宣传广告03340 网站建设与管理

响应式设计方法对开发者非常有用,因为它使我们的内容在各种设备上广为传播。不用保留几个独立版本的网站,也可以摒除诸如缩放和流式布局这些方法的弊端。 缩放、流式布局与响应式 这些术语容易造成混淆,设计师常常错误地交替互用。实际上&…

网站建设费用属于业务宣传费吗软件企业

写在前面的话: 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏后,才记得曾经有人提醒过。 核心军规 1、不在数据库做运算 cpu计算务必移至业务层 2、控制单表数据量 int型不超过1000w,含char则不超过500w&#xf…

Java入门级教程21——Java 缓存技术、RMI远程办法调用、多线程分割大档案

Java入门级教程21——Java 缓存技术、RMI远程办法调用、多线程分割大档案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

如何建设网站 知乎aoc24g2色域

随着信息技术的迅猛发展,计算机和网络已经成为了我们日常生活中不可或缺的工具,用于办公、通信和协作。尽管这些信息系统提高了工作效率,但也引发了一系列与信息安全相关的问题,例如如何有效地保护存储在这些系统中的关键数据&…

PowerToys新工具Light Switch:让Windows自动切换明暗主题

微软PowerToys将新增Light Switch工具,可根据时间自动切换Windows明暗主题。用户可设置地理位置或特定时间,还能选择仅系统、仅应用或两者同时切换主题,提升视觉舒适度。PowerToys:在Windows上根据时间自动切换明暗…

丰县做淘宝网站网站聚合页面怎么做

1005.K次取反后最大化的数组和 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。) 以这种方式修改数组后…

icoc.cc是哪个网站域名琼海网站制作

问题: 问题1磁盘满 1.原本是100G的大小,我们实际还没接入真正业务,昨日空间满了,需要帮忙看下是什么原因导致磁盘满的吗 数据库是每天备份一次,是不是备份的太频繁,还是数据量的问题导致,需要…

java从word模板生成.doc和.wps文件

当遇到要生成一个word文档(证明文件等)的需求时,就可以考虑使用word模板生成.doc和.wps文件 一、需求 1、生成如下这样的订单数据.doc文件,红框部分是变化的,其余部分是固定的2、生成如下这样的书籍列表,书的个数…

做我女朋友好不好手机网站汕头网站制作电话

一、介绍带有金属球的球形倾斜开关,它用于检测小角度的倾斜。图7.1 倾斜开关模块二、材料准备Arduino Uno 主板*1USB数据线*1倾斜开关模块*1杜邦线若干三、实验原理在倾斜开关中小球以不同的倾斜角度移动以造成触发电路的原理。倾斜开关模块使用双向传导的球形倾斜开…

分布式限流方案 - 详解

分布式限流方案 - 详解2025-09-30 19:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font…