torch之norm、normal、mean和std
一、norm
这个是计算范式
对应的公示是: 正常没有指定p的值的时候默认是2 如下所示
a = torch.arange(1, 6, dtype=torch.float32) print(torch.norm(a)) # 这里p没有指定,则默认是2 print(torch.norm(a, 1)) # 这里p指定为1 print(torch.norm(a, float('inf'))) # 这里p指定为inf即无穷大,表示的意思是取a中绝对值最大的项,并返回该绝对值项 上面的结果为: tensor(7.4162) tensor(15.) tensor(5.)
如上所示,根据公式则得出最后指出的打印的结果
这里着重再举个例子说一下这个float('inf')
b = torch.tensor([[1,2,3], [4,-7,6.]]) print(torch.norm(b, float('inf'))) # 因为是获取绝对值最大的,则该输出为:tensor(7.)
如果只是要获取最大值和最小值,则只需要b.max(), b.min() 即可获取到最大和最小值
二、normal
用于从给定的均值和标准差中生成指定大小的正态分布
该函数的参数包括:均值mean和标准差std,以及生成随机数的张量size
这里需要注意的是当mean和std均为标量的时候,才有必要传入size,否则无需传入size
1、当mean和std至少有一个是张量时候,不传入size
torch.manual_seed(0) #设置随机种子以保证结果可复现 mean = torch.zeros(3) std = torch.ones(3) print(torch.normal(mean, std)) # 显示1x3的正态分布数据 # 这里mean和std只要遵循广播机制即可,比如如下的mean和std也是可以的 torch.manual_seed(0) #设置 mean = torch.zeros(3) std = torch.ones([4,3]) print(torch.normal(mean, std)) # 显示4x3的正态分布数据
2、mean和std均为标量,则需要传入size来获取正态分布数据的维度
print(torch.normal(0.2, 0.3, [5, 6])) # 显示5行6列的正态分布数据
三、mean
用于计算给定张量的均值
print(torch.tensor([[1,2.], [2,5]]).mean()) # 打印的结果为tensor(2.5000) 即(1+2+2+5)/4 = 2.5
四、std
用于计算给定张量的标准差
标准差的计算公式:σ = sqrt( ( (a1-v)^2 + (a2 - v)^2 + (a3 - v)^2 + ...+ (an-v)^2) / (n - 1) ) 这里v = (a1 + ... + an) / n
所以下面的计算结果可以根据后面的注释得到
print(torch.tensor([[1,2.], [2,5]]).std()) # sqrt((1^2 + 2^2 + 2^2 + 5^2) / (4 - 1)) = 1.7321
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)