pytorch中的数组索引

2024-10-17 08:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在处理以下场景时,我遇到了奇怪的行为。tne是批次大小,N是每个示例的可能位置总数。每个示例正好有24个标量输出,它们的位置存储在dof张量中(dof的大小为(tne X 24))。Fint_e的大小为tneX24(即每个示例的24个输出)。我试图构造一个大张量,它的大小是tnexn。当我做下面的事情时,它以错误的方式填充。有什么建议吗

Fint_MAT        = torch.zeros((tne,N))
Fint_MAT[:,dof]  = Fint_e

dof张量的大小为批次大小x24,每个示例有不同的索引,但每个示例总共有24个索引

比如说,

自由度[0,:]=0,1,6,9,…(共24个)

自由度[1,:]=1100151300,…(共24个)

任何暗示都将不胜感激

为了更好地进行阐述,我在下面介绍了一个简单的场景:

tne = 3
N   = 48
Fint_MAT = torch.zeros((tne,N))
Fint_e   = torch.randn((tne, 24))
v1 = torch.arange(24).unsqueeze(0)
v2 = torch.arange(12, 36).unsqueeze(0)
v3 = torch.arange(24, 48).unsqueeze(0)
dof      = torch.cat((v1,v2,v3), axis=0).long()
Fint_MAT[:,dof]  = Fint_e

Tags: 示例场景zerosv3torchv2v1标量
1条回答
网友
1楼 · 发布于 2024-10-17 08:35:50

好的,这里的关键是使用成对的索引。你的dof张量对列进行索引,但你也需要对行进行索引

x_index = torch.arange(3).unsqueeze(1).expand(3, 24)

x_index是一个3 x 24张量,其中每一行都是行索引。现在,您可以将其与dof张量一起使用来索引Fint_MAT矩阵中的元素

Fint_MAT[x_index, dof] = Fint_e

基本上,x_indexdof中的对应元素在Fint_MAT中形成[行、列]对,因此Fint_MAT[x_index[0], dof[0]]= Fint_e[0]等等

我想这应该是你想要的

相关问题 更多 >