前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用numpy解决图像维度变换问题

使用numpy解决图像维度变换问题

作者头像
marsggbo
发布2018-10-11 11:04:51
2.2K0
发布2018-10-11 11:04:51
举报

使用numpy解决图像维度变换问题

numpy python

numpy函数介绍

1. np.transpose(input, axes=None)

在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*width。然后每次碰到这种问题都会想半天该怎么相互变换。

也想过自己手敲代码实现,但是一方面速度肯定没别人的方法好,另一方面还不一定是对的233。其实numpy已经帮我们都弄好了,我们只要使用np.transpose方法即可。

例如输入数据是a.shape = 1000*32*32*3(num*height*width*channel)

我们只需要使用如下代码即可达到要求。

  1. a = np.transpose(a, [0,3,1,2]) 

2. np.concatenate((a1, a2, …), axis=0)

  • 参数1:表示需要叠加的一组矩阵,可以是元组形式 (a1, a2, …),也可以是列表形式[a1,a2,…]。另外,各个矩阵的维度必须保持一致!
  • 参数2:axis默认为0,当然也可以设置为其他的值。

3. np.newaxis

这个可以用于扩展一个新的维度,例如假设我们的标签y.shape=(10,),我们想把它变成 (10,1) 该怎么做?很简单:

  1. y = y[:, np.newaxis] 


  1. # 其实也可以这样

  1. y = np.reshape(y, [len(y),1]) 

效果图如下:

4. np.mean & np.var

  • np.mean(a, axis=None, dtype=None, out=None, keepdims=<no value>)
  • np.var(a, axis=None, dtype=None, out=None, ddof=0, keepdims=<no value>)

很简单,这两个方法分别用来计算均值和方差,在图像数据预处理的时候很有帮助。可以在应用场景二中来看看具体的特殊用法。

实践出真知之应用场景一

现假设我们有一组二维图像数据集,其大小为3*2*2 (num*height*width)。我们现在想将这个二维数据集转化成3维的,而且最后维度顺序要是num*height*width*channel,我们应该咋办呢?

1. 扩展出一个新的维度用来表示channel

新增加一个维度,建议先将channel增加在第二个维度,这样更好理解,而且数据不会被打乱。

2.叠加channel

3.维度转置

4.验证是否正确

最后来验证一下这一波操作是否正确:

可以看到是正确的!!!

5.整体演示代码

实践出真知之应用场景二

假设我们现有三维数据集,a.shape=(4,2,2,3) (num, height, width, channel)。而在数据预处理之前呢,我们一般都需要将图像数据每个像素点的值除以255,之后再减去每个维度的均值,再除以方差。

但是怎么得到每个维度的均值和方差呢?

因为channel在最后一维,所以我们需要指定需要计算均值和方差的维度,即 0,1,2。另外还有一个很重要的就是我们需要讲keepdims这个参数设置为True,它的作用是让输出的结果保持相同的维度,比如说数据集是4维的,那么输出的均值也会是4维。由下图可以看到,如果keepdims=False,那么均值和方差则会变成1维列表


MARSGGBO♥原创

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用numpy解决图像维度变换问题
  • numpy函数介绍
    • 1. np.transpose(input, axes=None)
      • 2. np.concatenate((a1, a2, …), axis=0)
        • 3. np.newaxis
          • 4. np.mean & np.var
          • 实践出真知之应用场景一
            • 1. 扩展出一个新的维度用来表示channel
              • 2.叠加channel
                • 3.维度转置
                  • 4.验证是否正确
                    • 5.整体演示代码
                      • MARSGGBO♥原创
                  • 实践出真知之应用场景二
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档