Numpy 如何使用reshape或newaxis来添加维度
在Numpy中,有时候需要使用多维数组来存储数据,而我们需要手动添加维度。Numpy中提供了reshape和newaxis两种方式来添加维度。本文将为大家介绍这两种方法的使用以及注意点。
阅读更多:Numpy 教程
reshape方法
reshape方法是将原来的数组变成指定的形状,而不改变其数据元素的总数。假设我们有一个一维数组:x = np.array([1, 2, 3, 4, 5, 6])
,现在需要将其变成2行3列的二维数组。可以使用reshape方法,如下所示:
输出结果为:
同样的,我们也可以将其变成3维数组。代码如下:
输出结果为:
需要注意的是,reshape方法返回的是一个新的数组,并不是修改原数组。因此,如果需要修改原数组,可以使用“=”方式赋值,如下所示:
输出结果为:
newaxis方法
newaxis方法用于增加数组的维度。比如,我们有一个一维数组:x = np.array([1, 2, 3, 4, 5, 6])
,现在需要将其转换成二维数组,并且要求axis=0上增加一个新的维度。可以使用newaxis方法,如下所示:
输出结果为:
上述代码经过newaxis操作后,将一维数组变成了二维数组,且第一维的长度为1。同样的,我们也可以在其他维度上增加新维度。
输出结果为:
需要注意的是,newaxis方法只是视角上的改变,并没有真正增加数据量,因此不会开辟新的存储空间,也不会复制数据。可以通过调用数组的flags属性来查看数据是否是原数据的视图。
输出结果为:
reshape和newaxis的区别
从上面的介绍可以看到,reshape和newaxis都可以实现增加维度的功能。但它们的区别在于,reshape是将原来的数组变形成新的形状,返回的是一个新的数组,原数组并不会改变;而newaxis是在原来的数组的基础上,对某一维度进行扩展,返回的是原数组的一个视图。
举个例子,假设我们有一个二维数组x=np.array([[1,2],[3,4]])
,现在需要增加一个新的维度。首先我们使用reshape方法:
输出结果为:
然后我们使用newaxis方法:
输出结果为:
可以看到,两种方法得到的结果是相同的,都是增加了一个新的维度,但是reshape返回的是一个新的数组,而newaxis返回的是原数组的视图。
注意事项
在使用reshape和newaxis方法时,需要注意一些事项。
首先,reshape和newaxis操作需要遵循一定的规则。比如,使用reshape方法时,如果将一维数组转换成二维数组,需要保证原数组的元素个数可以被2整除,否则会出现ValueError异常。
运行上述代码会报错,提示ValueError: cannot reshape array of size 3 into shape (2,2)。
使用newaxis方法时,需要注意新维度的位置。比如,如果需要添加的新维度是第二个维度,那么不能使用x[newaxis,:]
的方式添加,而应该使用x[:,newaxis,:]
的方式添加。
以上代码会将数组x变成一个三维数组,但是第二个维度的长度为1,不是我们所需要的结果。应该改成以下代码:
这样得到的结果才是一个三维数组,且第二个维度的长度为1。
另外,在使用reshape和newaxis方法时,需要记住原数组的数据类型和维度的顺序。比如,如果是将一个uint8类型的一维数组转换成二维数组,需要使用如下代码:
如果使用如下代码,会出现TypeError异常:
提示信息为:TypeError: ‘<‘ not supported between instances of ‘int’ and ‘bytes’。
总结
本文介绍了Numpy中使用reshape和newaxis方法添加维度的方式,以及它们的区别和注意事项。在使用时,需要根据实际情况选择合适的方法,并遵守相关规则。