使用广播转换 for 循环

问题描述 投票:0回答:1

我有三个维度为 (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])

我无法使用广播获得匹配的正确尺寸。

for-loop tensor torch array-broadcasting
1个回答
0
投票

我首先通过解压张量生成 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_扩展

© www.soinside.com 2019 - 2024. All rights reserved.