作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119465264
目录
第1章 Tensor运算概述
1.1 概述
1.3 张量的操作与变换
1.4 环境准备
1.5
2. 数据元素限制:clamp(input, min, max, out=None)
(1) 函数说明
(2)代码示例
3. 条件帅选:where(cond, x, y)
(1)函数说明
(2)代码实例
4. 按index张量帅选:gather(input, dim, index)
(1)函数说明
(2) 代码实例
(3)图形解读
5. 按index向量帅选:index_select(input, dim, Tensor index)
(1)函数说明
(2)代码实例
(3)图形解读
第6章 按index向量帅选:take(input, Tensor index)
(1)函数说明
(2)代码示例
第7章 按掩码进行筛选:masked_select(input, mask)
(1)函数说明
(2)代码示例
第8章 输出非零元素的坐标:nonzero(input)
(1)函数说明
(2)代码示例
(3)图形解读
PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。
这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。
https://www.runoob.com/numpy/numpy-linear-algebra.html
1.2 运算分类
(1)算术运算:加、减、系数乘、系数除
(2)函数运算:sin,cos
(3)取整运算:上取整、下取整
(4)统计运算:最大值、最小值、均值
(5)比较运算:大于,等于,小于、排序
(6)线性代数运算:矩阵、点乘、叉乘
(1)变换形态
(2)变换内容
import numpy as np
import torch
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
(1)数据条件筛选:clamp(input, min, max, out=None)
(2)按索引进行筛选:
功能:把某一张量元素映射成另一张量元素,并把张量元素的值限制在【min, max】之间。
原型:clamp(input, min, max, out=None)
参数:
# 数据元素限制
a = torch.Tensor([0,1,2,3,4,5,6,7,8,9])
print("源张量")
print(a)
print("\n修剪方法1")
print(torch.clamp(a,3,7)) #输出张量元素值限制在[3,7]之间
print("\n修剪方法2")
print(a.clamp(5,6)) #输出张量元素值限制在[5,6]之间
print("\n源张量")
print(a)
输出:
源张量
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
修剪方法1
tensor([3., 3., 3., 3., 4., 5., 6., 7., 7., 7.])
修剪方法2
tensor([5., 5., 5., 5., 5., 5., 6., 6., 6., 6.])
源张量
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
功能:把两个张量的元素映射成一个张量,张量元素的选择取决于cond限制的条件。
原型:where(cond, x, y)
参数:
#条件帅选:
a = torch.Tensor([0,1,2,3,4])
b = torch.Tensor([5,6,7,8,9])
print("源张量")
print(a)
print(b)
print("\n映射后张量")
print(torch.where(a >= 3,a, b)) #大于a的值>=3, 取a的元素,否则取b的元素
print(torch.where(a >= 3,b, a)) #大于a的值>=3, 取b的元素,否则取a的元素
print("\n源张量")
print(a)
print(b)
输出:
源张量
tensor([0., 1., 2., 3., 4.])
tensor([5., 6., 7., 8., 9.])
映射后张量
tensor([5., 6., 7., 3., 4.])
tensor([0., 1., 2., 8., 9.])
源张量
tensor([0., 1., 2., 3., 4.])
tensor([5., 6., 7., 8., 9.])
备注说明:
功能:
原型:gather(input, dim, index)
参数:
# 按index张量帅选
a = torch.Tensor([[0,1,2,3,4],[5,6,7,8,9]])
print("源张量")
print(a)
print("\n映射后张量")
print(torch.gather(a,dim=1,index=torch.tensor([[0,2,3],[1,1,2]])))
输出:
源张量
tensor([[0., 1., 2., 3., 4.],
[5., 6., 7., 8., 9.]])
映射后张量
tensor([[0., 2., 3.],
[6., 6., 7.]])
备注:
gather需要指明每个需要映射的位置,包含行和列
功能:根据指定的(dim,index列表)参数,从已有的张量中,选择部分张量元素,映射成一个新的张量。
原型:index_select(input, dim, index)
参数:
# 按index向量帅选
a = torch.Tensor([[0,1,2,3,4],[5,6,7,8,9]])
print("源张量")
print(a)
print("\n映射后")
print(torch.index_select(a,dim=1,index=torch.tensor([0,3,1,1])))
输出:
源张量
tensor([[0., 1., 2., 3., 4.],
[5., 6., 7., 8., 9.]])
映射后
tensor([[0., 3., 1., 1.],
[5., 8., 6., 6.]])
备注:
功能:按掩码进行筛选,把掩码为true的值帅选出来。
原型:take(input, Tensor index)
参数:
# 按index向量帅选
a = torch.Tensor([[0,1,2,3,4],[5,6,7,8,9]])
print("源张量")
print(a)
print("\n映射后张量")
print(torch.take(a,index=torch.tensor([0,3,3,9])))
输出:
源张量
tensor([[0., 1., 2., 3., 4.],
[5., 6., 7., 8., 9.]])
映射后张量
tensor([0., 3., 3., 9.])
功能:按掩码进行筛选,把掩码为true的值帅选出来。
原型:masked_select(input, mask)
参数:
# 按掩码进行筛选
a = torch.Tensor([[0,1,2,10,4],[5,6,7,8,9]])
print("源张量:")
print(a)
print("\nMask张量:") #构建mask张量
mask = torch.gt(a, 6) # mask是一个值为True或false的张量
print(mask)
print("\n映射后张量:")
print(torch.masked_select(a, mask)) #映射后为1维度向量
输出:
源张量:
tensor([[ 0., 1., 2., 10., 4.],
[ 5., 6., 7., 8., 9.]])
Mask张量:
tensor([[False, False, False, True, False],
[False, False, True, True, True]])
映射后张量:
tensor([10., 7., 8., 9.])
功能:输出张量中所有非0元素对应的坐标,非常适合了解稀疏矩阵的非零元素的坐标。
原型:nonzero(input)
参数:
输出:
# 输出非零元素的坐标
a = torch.Tensor([[0,1,0,0,4],[5,0,0,0,9]])
print("源张量")
print(a)
print("\n映射后张量")
print(torch.nonzero(a))
输出:
源张量
tensor([[0., 1., 0., 0., 4.],
[5., 0., 0., 0., 9.]])
映射后张量
tensor([[0, 1],
[0, 4],
[1, 0],
[1, 4]])
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119465264