首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用torch提供的函数优化5层循环?

如何使用torch提供的函数优化5层循环?
EN

Stack Overflow用户
提问于 2020-01-02 17:30:05
回答 1查看 50关注 0票数 1

x是形状为(16,10,4,25,53)的张量,y的大小与x相同。

mean的形状为(25,53),jcac的大小均为(16,10,4)。

如何使用torch函数优化以下表达式?

代码语言:javascript
复制
for k in range(x.size()[0]):
    for s in range(x.size()[1]):
        for u in range(x.size()[2]):
            for i in range(x.size()[3]):
                for j in range(x.size()[4]):
                    num1 += (x[k][s][u][i][j] - mean[i][j] - jc[k][s][u]) * (y[k][s][u][i][j] - mean[i][j] - ac[k][s][u])
                    num2 += (y[k][s][u][i][j] - mean[i][j] - jc[k][s][u]) ** 2
                    num3 += (y[k][s][u][i][j] - mean[i][j] - ac[k][s][u]) ** 2
EN

回答 1

Stack Overflow用户

发布于 2020-01-02 17:46:13

我认为你看到的是,沿着单元素维度的张量。,broadcasting

首先,您需要维度的数量相同,因此如果mean的形状为(25,53),那么mean[None, None, None, ...]的形状为(1, 1, 1, 25, 53) -您没有更改底层数据中的任何内容,但维度的数量现在是5而不是只有2,并且这些单一维度可以广播到xy的相应维度。

使用广播的优化代码将如下所示:

代码语言:javascript
复制
num1 = ((x - mean[None, None, None, ...] - jc[..., None, None]) * (y - mean[None, None, None, ...] - ac[..., None, None])).sum()
num2 = ((y - mean[None, None, None, ...] - jc[..., None, None]) ** 2).sum()  # shouldn't it be x here?
num3 = ((y - mean[None, None, None, ...] - ac[..., None, None]) ** 2).sum()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59561002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档