我有一个形状为(a, b, c)
的3维数组/张量,并且我有一个不同索引的长度a
的列表,每个索引在[0, b)
的范围内.我想使用索引来获得一个大小为(a, c)
的array.现在,我用一种难看的列表理解来做这件事
z = torch.stack([t_[b, :] for t_, b in zip(tensor, B)])
这是在神经网络的前向传递中实现的,所以我真的想避免列表理解.有没有什么Torch(或NumPy)函数可以更高效地完成我想要的事情?
还有一个小例子:
tensor = [[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]] # shape: (4, 3, 2)
B = [0, 1, 2, 2]
output = [[ 0, 1],
[ 8, 9],
[16, 17],
[22, 23]] # shape (4, 2)
背景:我有时间序列数据,这些数据有不同长度的时间窗口.我使用Torch的pack_padded_sequence
(和反向)来屏蔽它,但我必须在屏蔽开始之前的时间点获得LSTM
的输出,因为这样网络的输出就会变得不可用.在本例中,我有4个时点,每个时点的长度为0, 1, 2, 2
,每个时点有2个特征.