einops基础使用

einops基础使用

einops是一个用于操作张量的库,它的出现可以替代我们平时使用的reshape、view、transpose和permute等操作

einops支持numpy、pytorch、tensorflow等
y = x.transpose(0, 2, 3, 1) 等同
y = rearrange(x, ‘b c h w -> b h w c’)

官方文档

在这里插入图片描述

import sys  
sys.path.append("/content/docs")
import numpy
from utils import display_np_arrays_as_images
display_np_arrays_as_images()
ims = numpy.load('/content/docs/resources/test_images.npy', allow_pickle=False)
# 63通道96*96的彩色图
print(ims.shape, ims.dtype)

在这里插入图片描述

ims[0]

在这里插入图片描述

rearrange 重新排列

1.对图像高宽进行转换

rearrange(ims[0], 'h w c -> w h c')

在这里插入图片描述
2.将批次和高度组合到一个新的高度维度

rearrange(ims,'b h w c ->(b h) w c')

在这里插入图片描述

rearrange(ims, 'b h w c -> h (b w) c')

在这里插入图片描述

rearrange(ims,'b h w c ->(b w) h c')

在这里插入图片描述

rearrange(ims, 'b h w c -> h (b w) c').shape

在这里插入图片描述
合并成一维

rearrange(ims, 'b h w c -> (b h w c)').shape

在这里插入图片描述

分解维度

# 指定一个维度,剩下一个维度可以自己算出
rearrange(ims, '(b1 b2) h w c -> b1 b2 h w c ', b1=2).shape

在这里插入图片描述

先分解维度,再合并维度

rearrange(ims, '(b1 b2) h w c -> (b1 h) (b2 w) c ', b1=2)

在这里插入图片描述

rearrange(ims, '(b1 b2) h w c -> (b2 h) (b1 w) c ', b1=2)

在这里插入图片描述

rearrange(ims, 'b h (w w2) c -> (h w2) (b w) c', w2=2)

在这里插入图片描述

Reduce

合并第一个维度(以均值合并)

reduce(ims, 'b h w c -> h w c', 'mean')

在这里插入图片描述
轴操作

ims.mean(axis=0)

在这里插入图片描述
除了均值mean, 还有 min, max, sum, prod操作

reduce(ims, 'b h w c -> h w', 'min')

在这里插入图片描述
缩小图为原来是1/4

reduce(ims, 'b (h h2) (w w2) c -> h (b w) c', 'mean', h2=2, w2=2)

在这里插入图片描述

Stack and concatenate

# 转list
x = list(ims)
print(type(x), 'with', len(x), 'tensors of shape', x[0].shape)
# that's how we can stack inputs
# "list axis" becomes first ("b" in this case), and we left it there
rearrange(x, 'b h w c -> b h w c').shape

在这里插入图片描述

rearrange(x, 'b h w c -> h w c b').shape

在这里插入图片描述

numpy.array_equal(rearrange(x, 'b h w c -> h w c b'), numpy.stack(x, axis=3))

在这里插入图片描述

rearrange(x, 'b h w c -> h (b w) c').shape

numpy.array_equal(rearrange(x, 'b h w c -> h (b w) c'), numpy.concatenate(x, axis=1))

Repeat

repeat(ims[0], 'h w c -> h new_axis w c', new_axis=5).shape

在这里插入图片描述

# shortcut
repeat(ims[0], 'h w c -> h 5 w c').shape

在这里插入图片描述

repeat(ims[0], 'h w c -> h (repeat w) c', repeat=3)

在这里插入图片描述

repeat(ims[0], 'h w c -> (2 h) (2 w) c')

在这里插入图片描述

(repeat w)换成 (w repeat)就是对原图进行拉伸

repeat(ims[0], 'h w c -> h (w repeat) c', repeat=3)

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值