对数组形状的操作可以分为就地变维,视图变维,副本变维三种,每种都有相应的函数可以实现操作。首先需要了解视图和副本的基本概念:副本是将数据重新复制一份。视图是与原数据共享一份数据。
修改数组在内存中的形状,会改变原数组的形状。
方法 | 说明 |
---|---|
ndarray.resize() | 就地更改数组的形状 |
ndarray.shape=() | 为数组的shape属性直接赋值 |
ndarray.resize()
ndarray.resize(new_shape, refcheck=True)
就地更改数组的形状和大小。
参数说明:
返回值:
示例:
>>> a = np.arange(1,7)
>>> a
array([1, 2, 3, 4, 5, 6])
>>> a.resize((2, 3)) # 或者a.resize(2, 3)
>>> a
array([[1, 2, 3],
[4, 5, 6]])
ndarray.shape
为ndarray.shape的属性直接赋值也可以进行就地变维。示例如下:
>>> a = np.arange(1,7)
>>> a
array([1, 2, 3, 4, 5, 6])
>>> a.shape = (3, 2)
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
视图变维只改变数组输出的形状,而数组在内存中的形状还保持原来的样子。
方法 | 说明 |
---|---|
ndarray.reshape() | 返回新形状的数组视图 |
ndarray.ravel() | 返回一个展平的数组 |
ndarray.reshape()
返回新形状的数组视图。
ndarray.reshape(shape, order='C')
参数说明:
返回值:
示例:
>>> a = np.arange(1,7)
>>> a
array([1, 2, 3, 4, 5, 6])
>>> a.reshape((2,3)) # 或者a.reshape(2,3)
array([[1, 2, 3],
[4, 5, 6]])
ndarray.ravel()
ndarray.ravel([order])
返回一个被延展拉平的数组,数据不独立,与原数组共享数据。
参数说明:
返回值:
示例:
>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> x
array([[1, 2, 3],
[4, 5, 6]])
>>> x.ravel()
array([1, 2, 3, 4, 5, 6])
>>> x # 数组x本身没有发生变化
array([[1, 2, 3],
[4, 5, 6]])
输出一个副本的数组,和原数组属于两个独立的数组,不会影响原数组的形状。
方法 | 说明 |
---|---|
ndarray.flatten() | 返回展平成一维数组的副本。 |
ndarray.flatten()
ndarray.flatten(order='C')
返回延展成为一维数组的副本。
参数说明:
返回值:ndarray
示例:
>>> a = np.array([[1,2], [3,4]])
>>> a
array([[1, 2],
[3, 4]])
>>> a.flatten() # 返回的是副本,数据与原数组a独立。
array([1, 2, 3, 4])
以上三种改变数组形状的介绍,可以根据实际应用场景选择相应的变换方法,每种变化方法下有对应的函数,前期学习先掌握函数可以实现什么功能,不用去记语法,函数的参数实在不停的使用过程中掌握的。