U = torch.zeros(n, m, m)
for i in range(n):
for k in range(m):
for l in range(m):
U[i][k][l] = T[i][i][k][l]
我对pytorch完全陌生,我尝试了很多功能组合,但没有一个给我一个令人满意的结果。有人有想法吗?
答案 0 :(得分:0)
您可以使用np.meshgrid
i, k, l = np.meshgrid(range(n), range(m), range(m))
U[i, k, l] = T[i, i, k, l]
为了完整性,我做了:
n = 3
m = 5
T = torch.arange(n * n * m * m).view(n, n, m, m)
U = torch.zeros(n, m, m)
U_ = torch.zeros(n, m, m)
i, k, l = np.meshgrid(range(n), range(m), range(m))
U_[i, k, l] = T[i, i, k, l]
for i in range(n):
for k in range(m):
for l in range(m):
U[i][k][l] = T[i][i][k][l]
U = U.view(-1)
U_ = U_.view(-1)
print ((U == U_).all())
输出为True
,所以我认为它是正确的。
答案 1 :(得分:0)
应用于二维矩阵时,torch.diag()
是 torch.diagonal()
的别名。
diagonal
本身允许您指定对角线取自任意秩张量的哪两个维度,默认情况下为 0 和 1:
U = T.diagonal()