张量与 PyTorch 之间的成对差异
Pairwise difference between tensors with PyTorch
我有以下问题:给定两个形状为 (T,n,d) 的张量 X 和形状为 (R,m,d) 的张量 Y,我想计算形状为 (T,R, n,m,d) 这样,对于所有 0 <= t < T, 1 <= r < R, 1 <= i < n, 1 <= j < m,
D[t,r,i,j] = X[t,i] - Y[r,j]
我们可以在不使用任何循环的情况下使用 Pytorch 计算 D 吗?
我知道当给定两个形状为 (n,d) 的张量 X 和形状为 (m,d) 的张量 Y 时,我们可以计算形状为 (n,m,d) 的张量 D,这样,对于所有 1 <= i < n, 1 <= j < m, D[i,j] = X[i] - Y[j] 使用
x.unsqueeze(1) - y
我正在寻找的是针对初始问题的类似技巧。
我认为以下代码片段可能会满足您的需求:
# reshapes X to (T, R, n, m, d)
X_rs = X.view(T, 1, n, 1, d).expand(-1, R, -1, m, -1)
# reshapes Y to (T, R, n, m, d)
Y_rs = Y.view(1, R, 1, m, d).expand(T, -1, n, -1, -1)
# Compute the coefficient-wise difference
D = X_rs - Y_rs
请注意,expand
操作不会分配新内存。这只是你提到的“技巧”的概括
我有以下问题:给定两个形状为 (T,n,d) 的张量 X 和形状为 (R,m,d) 的张量 Y,我想计算形状为 (T,R, n,m,d) 这样,对于所有 0 <= t < T, 1 <= r < R, 1 <= i < n, 1 <= j < m,
D[t,r,i,j] = X[t,i] - Y[r,j]
我们可以在不使用任何循环的情况下使用 Pytorch 计算 D 吗?
我知道当给定两个形状为 (n,d) 的张量 X 和形状为 (m,d) 的张量 Y 时,我们可以计算形状为 (n,m,d) 的张量 D,这样,对于所有 1 <= i < n, 1 <= j < m, D[i,j] = X[i] - Y[j] 使用
x.unsqueeze(1) - y
我正在寻找的是针对初始问题的类似技巧。
我认为以下代码片段可能会满足您的需求:
# reshapes X to (T, R, n, m, d)
X_rs = X.view(T, 1, n, 1, d).expand(-1, R, -1, m, -1)
# reshapes Y to (T, R, n, m, d)
Y_rs = Y.view(1, R, 1, m, d).expand(T, -1, n, -1, -1)
# Compute the coefficient-wise difference
D = X_rs - Y_rs
请注意,expand
操作不会分配新内存。这只是你提到的“技巧”的概括