【发布时间】:2021-12-11 20:56:00
【问题描述】:
我想创建 2d 张量(或 numpy 数组,并不重要),其中每一行都将循环移位第一行。我使用for 循环:
import torch
import numpy as np
a = np.random.rand(33, 11)
miss_size = 64
lp_order = a.shape[1] - 1
inv_a = -np.flip(a, axis=1)
mtx_size = miss_size+lp_order # some constant
mtx_row = torch.cat((torch.from_numpy(inv_a), torch.zeros((a.shape[0], miss_size - 1 + a.shape[1]))), dim=1)
mtx_full = mtx_row.unsqueeze(1)
for i in range(mtx_size):
mtx_row = torch.roll(mtx_row, 1, 1)
mtx_full = torch.cat((mtx_full, mtx_row.unsqueeze(1)), dim=1)
需要解压,因为我将 2d 张量堆叠到 3d 张量中
有没有更有效的方法来做到这一点?也许是线性代数技巧或更 Pythonic 的方法。
【问题讨论】:
-
你能提供一个最小的例子吗?
-
@Ivan 最小的例子在帖子的文本中
-
确实如此,但请提供
mtx_row、miss_size和lp_order,以便作为显示所需行为的最小示例。 -
@Ivan 添加了虚拟常量
标签: python numpy pytorch cycle