numpy python
在机器学习中经常会碰到各种图像数据集,有的是按照num*height*width*channel来存储的,而有的则是num*channel*height*width。然后每次碰到这种问题都会想半天该怎么相互变换。
也想过自己手敲代码实现,但是一方面速度肯定没别人的方法好,另一方面还不一定是对的233。其实numpy已经帮我们都弄好了,我们只要使用np.transpose方法即可。
例如输入数据是a.shape = 1000*32*32*3(num*height*width*channel)
我们只需要使用如下代码即可达到要求。
这个可以用于扩展一个新的维度,例如假设我们的标签y.shape=(10,),我们想把它变成 (10,1) 该怎么做?很简单:
效果图如下:
很简单,这两个方法分别用来计算均值和方差,在图像数据预处理的时候很有帮助。可以在应用场景二中来看看具体的特殊用法。
现假设我们有一组二维图像数据集,其大小为3*2*2 (num*height*width)。我们现在想将这个二维数据集转化成3维的,而且最后维度顺序要是num*height*width*channel,我们应该咋办呢?
新增加一个维度,建议先将channel增加在第二个维度,这样更好理解,而且数据不会被打乱。
最后来验证一下这一波操作是否正确:
可以看到是正确的!!!
假设我们现有三维数据集,a.shape=(4,2,2,3) (num, height, width, channel)。而在数据预处理之前呢,我们一般都需要将图像数据每个像素点的值除以255,之后再减去每个维度的均值,再除以方差。
但是怎么得到每个维度的均值和方差呢?
因为channel在最后一维,所以我们需要指定需要计算均值和方差的维度,即 0,1,2。另外还有一个很重要的就是我们需要讲keepdims这个参数设置为True,它的作用是让输出的结果保持相同的维度,比如说数据集是4维的,那么输出的均值也会是4维。由下图可以看到,如果keepdims=False,那么均值和方差则会变成1维列表