【Python踩坑】关于tensor reshape后做运算(求和/平均)的问题

试想一个简单的问题:一个维度是[1, 6]的tensor,我想其中的6个元素分成3组,每组2个元素,然后对每组中的元素求平均值,得到一个维度是3的输出。应该怎么用Python实现?

最直观的想法就是:将[1, 6]先reshape成[2, 3]或[3, 2],然后在2对应的维度上进行运算,最终得到维度是3的结果。但是,真的[2, 3]或[3, 2]都能行吗?

下面让我们来看看两者的区别,感受一下区别。

a = torch.tensor([[1., 2., 3., 4., 5., 6.]])

b1 = a.reshape(2, 3)
print(b1)
mean_b1 = torch.mean(b1, dim=0, keepdim=False)
print(mean_b1)

b2 = a.reshape(3, 2)
print(b2)
mean_b2 = torch.mean(b2, dim=1, keepdim=False)
print(mean_b2)

输出:

tensor([[1., 2., 3.],
        [4., 5., 6.]])
tensor([2.5000, 3.5000, 4.5000])
tensor([[1., 2.],
        [3., 4.],
        [5., 6.]])
tensor([1.5000, 3.5000, 5.5000])

可以发现,[2, 3]和[3, 2]两种方式得到的结果是不同的!因为reshape后的元素排列方式不同。

总结一句,如果想将tensor分成n组,然后对每组进行运算(比如求和、求平均),那么,要记得把组数放在前面的维度上(也就是上面例子中的3),把每组的元素数放在后面的维度上(也就是上面例子中的2)。
但如果只是reshape,但是没有分组的运算,那么[2, 3]和[3, 2]都可以,反正都可以等价地reshape回原来的排列。

相关推荐

  1. 关于在Ubuntu上配置mysql一些

    2024-05-01 07:32:03       40 阅读
  2. Python

    2024-05-01 07:32:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 07:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 07:32:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 07:32:03       82 阅读
  4. Python语言-面向对象

    2024-05-01 07:32:03       91 阅读

热门阅读

  1. Python学习指南

    2024-05-01 07:32:03       34 阅读
  2. redis运维篇上篇

    2024-05-01 07:32:03       118 阅读
  3. C++——数据结构stack,queue,priority_queue

    2024-05-01 07:32:03       34 阅读
  4. 语言模型:智能化未来的钥匙

    2024-05-01 07:32:03       24 阅读
  5. 在C++中初始化二维数组的几种不同方法

    2024-05-01 07:32:03       32 阅读
  6. Ubuntu22.04 私钥登录

    2024-05-01 07:32:03       104 阅读
  7. 常用网络知识点(网管网工需掌握)

    2024-05-01 07:32:03       26 阅读
  8. 关于chatgpt的理解与探索

    2024-05-01 07:32:03       31 阅读
  9. 移动端适配方案

    2024-05-01 07:32:03       35 阅读
  10. Go语言中的map使用及并发安全

    2024-05-01 07:32:03       42 阅读
  11. VUE2从入门到精通(一)

    2024-05-01 07:32:03       28 阅读