首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Einops重排函数基本功能

Einops重排函数基本功能
EN

Stack Overflow用户
提问于 2021-08-06 17:42:59
回答 1查看 130关注 0票数 1

我试图理解用于张量重新排序的einops语法,但不知何故没有抓住要点

如果我有下面的矩阵:

代码语言:javascript
运行
复制
mat = torch.randint(1, 10, (8,4))

我理解以下命令的作用:

代码语言:javascript
运行
复制
rearrange(mat, '(h n) w -> (n h) w', n = 2)

但我真的不能理解以下几点:

代码语言:javascript
运行
复制
rearrange(mat, '(n h) w -> (h n) w', n = 2)
代码语言:javascript
运行
复制
rearrange(mat, '(n h) w -> (h n) w', n = 4)

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-07 18:40:51

代码语言:javascript
运行
复制
rearrange(mat, '(h n) w -> (n h) w', n = 2)
and
rearrange(mat, '(n h) w -> (h n) w', n = 2)

是彼此的倒置。如果你可以想象一个人做什么,第二个做反向转换

对于后者,mat为8x4

代码语言:javascript
运行
复制
rearrange(mat, '(n h) w -> (h n) w', n = 4)

所以你首先在4x2中拆分第一个维度(下面我忽略w维度,因为它没有什么特别的变化)

代码语言:javascript
运行
复制
[0, 1, 2, 3, 4, 5, 6, 7]

代码语言:javascript
运行
复制
[0, 1, 
 2, 3, 
 4, 5, 
 6, 7]

然后将轴的顺序更改为2x4 (转置)

代码语言:javascript
运行
复制
[0, 2, 4, 6,
 1, 3, 5, 7]

然后将两个维度合并为一个维度

代码语言:javascript
运行
复制
[0, 2, 4, 5, 1, 3, 5, 7]

如果您仍然感觉不到它是如何工作的,可以举一些简单的例子,比如

代码语言:javascript
运行
复制
rearrange(np.arange(50), '(h n) -> h n', h=5)
rearrange(np.arange(50), '(h n) -> h n', h=10)
rearrange(np.arange(50), '(h n) -> n h', h=10)

等,这样您就可以跟踪矩阵中每个元素的移动

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68685636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档