在处理以下场景时,我遇到了奇怪的行为。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
好的,这里的关键是使用成对的索引。你的
dof
张量对列进行索引,但你也需要对行进行索引x_index
是一个3 x 24张量,其中每一行都是行索引。现在,您可以将其与dof
张量一起使用来索引Fint_MAT
矩阵中的元素基本上,
x_index
和dof
中的对应元素在Fint_MAT
中形成[行、列]对,因此Fint_MAT[x_index[0], dof[0]]= Fint_e[0]
等等我想这应该是你想要的
相关问题 更多 >
编程相关推荐