einops的基本使用

本文介绍了einops库在张量操作中的应用,包括维度交换、增加/减少维度、分组操作等。通过rearrange函数实现灵活的维度变换,如将'hwc'转为'whc',并展示如何拆分和重组张量。reduce函数则用于求均值、最小值等聚合操作,而repeat函数用于张量的复制。这些功能使得张量操作更为简便易懂。
摘要由CSDN通过智能技术生成

一、einops的介绍

einops用于实现对张量(Tensor)的操作,它可以更简单的实现张量的变换,并且很容易上手。einops的作用类似pytorch中的review,transpose,permute等操作的合集。

二、安装与导包

pip install einops
from einops import rearrange,repeat,reduce

三、一些常用的操作

以下图为例,演示常用的操作。

在这里插入图片描述

3.1 rearrange操作

  1. 维度交换

    from einops import rearrange
    # -> 前面的h w c代表img未变换前的shape,后面的w h c是要变成的shape
    # h w c只是人们的习惯,你完全可以写成 a b c
    rearrange(img,'h w c -> w h c')
    rearrange(img,'a b c -> b a c')
    
  2. 增加/减少维度

    # 增加维度
    img7 = rearrange(img, 'h w c ->1 h w c')
    img7 = rearrange(img7, '1 h w c ->h w c')
    
  3. 拆分单词(以w维度将单词拆分为6个字母)

    # 以w维度对图像进行分组
    # (b w)表示将第1维度的长度=b*w,b表示组数,w表示每组大小
    img2=rearrange(img,'h (b w) c->b h w c',b=6)
    
  4. 将单词改为竖向

    # 先分组,而后将将b与h合并
    img3 = rearrange(img, 'h (b w) c->(b h) w c', b=6)
    

在这里插入图片描述
4. 先分组,再排成两行

# 将第1维度分成b1 b2 和w的乘积。两行可以确定b1=2
img4 = rearrange(img, 'h (b1 b2 w) c->(b1 h) (b2 w) c', b1=2,b2=3)

在这里插入图片描述


3.2 reduce操作

  1. 求均值
# 求均值,->前后消失的符号代表求均值的维度
# 如果想要保留纬度数不变,可以用1带填补
img5=reduce(img.astype("float"), 'h w c -> h w', 'mean')
img5=reduce(img.astype("float"), 'h w c -> h w 1', 'mean')
img5=reduce(img.astype("float"), 'h w c -> h', 'mean')
  1. 最小值
# 最小值
img6 = reduce(img.astype("float"), 'h w c -> h w 1', 'min')

其他计算:min, max, sum, prod

3.3 repeat操作

# 重复
img8=repeat(img, 'h w c -> (repeat h) w c', repeat=3)

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流星子弹弹堂

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值