我有三个维度为 (K,) (K,) (n,) 的张量 X、Y、Z 和一个接受两个输入并返回浮点数的函数 k。
我想转换以下循环以获得尺寸为 (K,K,n) 的张量
M = torch.zeros( (len(X),len(Y),len(Z)))
for i in range(len(X)):
for j in range(len(Y)):
for s in range(len(Z)):
M[i,j,s] = k(X[i], Z[s]) * k(Y[i], Z[s])
我无法使用广播获得匹配的正确尺寸。
我首先通过解压张量生成 K1 和 K2 矩阵:
K1 = k(X.unsqueeze(1),Z) K2 = k(Y.unsqueeze(1),Z)
然后我解压矩阵以获得额外的维度并在这些维度上进行广播:
K1_expanded = K1.unsqueeze(1) K2_expanded = K2.unsqueeze(0)
M = K1_扩展 * K2_扩展