torch.squeeze、 numpy.squeeze()详解

超链接:深度学习工作常用方法汇总,矩阵维度变化、图片、视频等操作,包含(torch、numpy、opencv等)


1. 降低维度 : squeeze、 numpy.squeeze()

torch版:

x.squeeze()

如果不传位置,则删除所有大小为1的维度。
例如,如果输入的形状为:(A×1×B×C×1×D)则输出张量的形状为(A×B×C×D)
传入位置,若矩阵的相应位置的维度为1,则删除,其他维度不变;若不为1,则不变。
总结:只能维度为1时,才能降低相应位置维度

torch示例:

import torch
import numpy as np

x = torch.rand((2, 2, 1, 3, 1, 3))
# 不传入位置,删除矩阵中所有维度为1的
b = x.squeeze()
# 如果1处维度为1,则删除此维度,其他维度不变
c = x.squeeze(1)
# 如果2处维度为1,则删除此维度,其他维度不变
d = x.squeeze(2)
print('x_shape:', x.shape)  # torch.Size([2, 2, 1, 3, 1, 3])
print('b_shape:', b.shape)  # b_shape: torch.Size([2, 2, 3, 3])
print('c_shape:', c.shape)  # c_shape: torch.Size([2, 2, 1, 3, 1, 3])
print('d_shape:', d.shape)  # d_shape: torch.Size([2, 2, 3, 1, 3])

numpy版:

从ndarray的shape中,去掉维度为1的。

默认去掉所有的1。

注意:只能去掉shape中的1,其他数字的维度无法去除。

当传入的轴对应维度不为1时,np会报错,报错如下:

ValueError: cannot select an axis to squeeze out which has size not equal to one

但是torch中不会报错,会返回原数据,见上面示例。

numpy示例:


import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
x = x.reshape(1, 1, 1, 2, 5)

a = x.squeeze()
b = x.squeeze(0)
c = x.squeeze(1)
d = x.squeeze(2)
# 维度不为1时,进行删除会报错
# e = x.squeeze(4)
print('x_shape:', x.shape)  # (1, 1, 1, 2, 5)
print('a_shape:', a.shape)  # (2, 5)
print('b_shape:', b.shape)  # (1, 1, 2, 5)
print('c_shape:', c.shape)  # (1, 1, 2, 5)
print('d_shape:', d.shape)  # (1, 1, 2, 5)
# print('e_shape:', e.shape)  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python图像识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值