[PyTroch系列-13]:PyTorch基础 - 张量的操作 - 筛选、过滤

作者主页(文火冰糖的硅基工坊):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)图形解读


第1章 Tensor运算概述

1.1 概述

PyTorch提供了大量的张量运算,基本上可以对标Numpy多维数组的运算,以支持对张量的各种复杂的运算。

这些操作运算中大多是对数组中每个元素执行相同的函数运算,并获得每个元素函数运算的结果序列,这些序列生成一个新的同维度的数组。

https://www.runoob.com/numpy/numpy-linear-algebra.html

1.2 运算分类

(1)算术运算:加、减、系数乘、系数除

(2)函数运算:sin,cos

(3)取整运算:上取整、下取整

(4)统计运算:最大值、最小值、均值

(5)比较运算:大于,等于,小于、排序

(6)线性代数运算:矩阵、点乘、叉乘

1.3 张量的操作与变换

(1)变换形态

(2)变换内容

1.4 环境准备

import numpy as np
import torch
 
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())

1.5 张量的操作 - 筛选过滤

(1)数据条件筛选:clamp(input, min, max, out=None)

(2)按索引进行筛选:

2. 数据元素限制:clamp(input, min, max, out=None)

(1) 函数说明

功能:把某一张量元素映射成另一张量元素,并把张量元素的值限制在【min, max】之间。

原型:clamp(input, min, max, out=None)

参数:

  • input:输入张量
  • min:限定的最小值,小于该数值的数据都会被min替换
  • min:限定的最大值,大于该数值的数据都会被max替换

(2)代码示例

#  数据元素限制
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.])

3. 条件帅选:where(cond, x, y)

(1)函数说明

功能:把两个张量的元素映射成一个张量,张量元素的选择取决于cond限制的条件。

原型:where(cond, x, y)

参数:

  • cond: 映射过程中的条件
  • x:输入张量x
  • y:输入张量y

(2)代码实例

#条件帅选:
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.])

备注说明:

  • 当张量a的元素值>=3时,采用a的元素映射,否则,采用b的元素映射。
  • 映射前后,不改变源张量的数值。

4. 按index张量帅选:gather(input, dim, index)

(1)函数说明

功能:

原型:gather(input, dim, index)

参数:

  • input:输入张量
  • dim:指定帅选的方向。
  • index:指定index,由index构成一个张量,index可以重复、可以不按照原先张量的index顺序。

(2) 代码实例

# 按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.]])

(3)图形解读

 备注:

gather需要指明每个需要映射的位置,包含行和列

5. 按index向量帅选:index_select(input, dim, Tensor index)

(1)函数说明

功能:根据指定的(dim,index列表)参数,从已有的张量中,选择部分张量元素,映射成一个新的张量。

原型:index_select(input, dim, index)

参数:

  • input:输入张量
  • dim:指定帅选的方向。
  • index:指定index,由index构成一个向量,index可以重复、可以不按照原先张量的index顺序。

(2)代码实例

# 按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.]])

备注:

  • 次案例是按照dim=1的方向进行挑选
  • 被挑选的张量元素的index顺序为:[0., 3., 1., 1.]
  • 可以不按照原先张量的顺序,如0. 3,1
  • 可以重复元素,如1,1
  • 映射后的张量元素通常被原先的张量元素个数要少

(3)图形解读

第6章 按index向量帅选:take(input, Tensor index)

(1)函数说明

功能:按掩码进行筛选,把掩码为true的值帅选出来。

原型:take(input, Tensor index)

参数:

  • input:输入张量
  • index:index向量,参数中没有dim,因此这里的index是把整个张量转换成一维向量之后的索引值。这是与index_select()的区别

(2)代码示例

# 按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.])

 第7章 按掩码进行筛选:masked_select(input, mask)

(1)函数说明

功能:按掩码进行筛选,把掩码为true的值帅选出来。

原型:masked_select(input, mask)

参数:

  • input:输入张量
  • mask:掩码张量

(2)代码示例

# 按掩码进行筛选
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.])

第8章 输出非零元素的坐标:nonzero(input)

(1)函数说明

功能:输出张量中所有非0元素对应的坐标,非常适合了解稀疏矩阵的非零元素的坐标。

原型:nonzero(input)

参数:

  • input:输入张量

输出:

  • 输出值张量
  • 每个坐标值是一个张量,维度与input的维度相同
  • 所有的输出值,又组成一个更高维度的张量。

(2)代码示例

# 输出非零元素的坐标
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]])

(3)图形解读


作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119465264

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值