Numpy怎样给数组增加一个维度
背景:
很多数据计算都是在二维或三维的,对于一维的数据输入为了形状匹配,经常需要升维变成二维
需要:
在不改变是数据的情况下,添加数组维度;(注意观察这个例子,维度变了,但数据没变)
原始数组:一维数组arr=[1, 2, 3, 4],其shape是(4,),取值分别为arr[0], arr[1], arr[2], arr[3]
变形数组:二维数组arr=[[1, 2, 3, 4]],其shape是(1, 4),取值分别为arr[0, 0], arr[0, 1], arr[0, 2], arr[0, 3]
实操:
经常需要在纸上手绘数组的形状,来查看不同数组是否形状匹配,是否需要升维降维
3种方法:
np.newaxis:关键字,使用索引的语法给数组添加维度
np.expand_dims(arr, axis):方法,和np.newaxis实现一样的功能,给arr在axis位置添加维度
np.reshape(a, newshape):方法,给一个维度设置为1完成升维
import numpy as np
import numpy as np
In [2]:
arr = np.arange(5)
arr
Out[2]:
array([0, 1, 2, 3, 4])
In [3]:
# 注意,当前是一维向量
arr.shape
Out[3]:
(5,)
方法1:np.newaxis关键字
注意:np.newaxis其实就是None的别名
In [4]:
np.newaxis is None
Out[4]:
True
In [5]:
np.newaxis == None
Out[5]:
True
即一下所有的np.newaxis的位置,都可以用None替代
给一维向量添加一个行维度
In [6]:
arr[np.newaxis, :]
Out[6]:
array([[0, 1, 2, 3, 4]])
In [7]:
arr[np.newaxis, :].shape
Out[7]:
(1, 5)
数据现在是一行五列,数据本身没有增减,只是多了一级括号
给一维向量添加一个列维度
In [10]:
arr[:,np.newaxis]
Out[10]:
array([[0],
[1],
[2],
[3],
[4]])
In [11]:
arr[:,np.newaxis].shape
Out[11]:
(5, 1)
现在是五行一列
方法2:np.expand_dims方法
np.expand_dims方法实现的效果,和np.newaxis关键字是一模一样的
In [12]:
arr
Out[12]:
array([0, 1, 2, 3, 4])
给一维数组添加一个行维度
相当于arr[np.newaxis, arr]
In [13]:
np.expand_dims(arr, axis=0)
Out[13]:
array([[0, 1, 2, 3, 4]])
In [14]:
np.expand_dims(arr, axis=0).shape
Out[14]:
(1, 5)
给一维数组添加一个列维度
相当于arr[arr, np.newaxis]
In [15]:
np.expand_dims(arr, axis=1)
Out[15]:
array([[0],
[1],
[2],
[3],
[4]])
In [16]:
np.expand_dims(arr, axis=1).shape
Out[16]:
(5, 1)
方法3:np.reshape方法
给一维数组添加一个行维度
In [17]:
arr
Out[17]:
array([0, 1, 2, 3, 4])
In [18]:
np.reshape(arr, (1, 5))
Out[18]:
array([[0, 1, 2, 3, 4]])
In [19]:
np.reshape(arr, (1, -1))
Out[19]:
array([[0, 1, 2, 3, 4]])
In [20]:
np.reshape(arr, (1, -1)).shape
Out[20]:
(1, 5)
给一维数组添加一个列维度
In [21]:
np.reshape(arr, (-1, 1))
Out[21]:
array([[0],
[1],
[2],
[3],
[4]])
In [22]:
np.reshape(arr, (-1, 1)).shape
Out[22]:
(5, 1)