Numpy:数组(Ndarray)操作之形状操作


形状操作

对数组形状的操作可以分为就地变维,视图变维,副本变维三种,每种都有相应的函数可以实现操作。首先需要了解视图和副本的基本概念:副本是将数据重新复制一份。视图是与原数据共享一份数据。

就地变维

修改数组在内存中的形状,会改变原数组的形状。

方法 说明
ndarray.resize() 就地更改数组的形状
ndarray.shape=() 为数组的shape属性直接赋值

ndarray.resize()

ndarray.resize(new_shape, refcheck=True)

就地更改数组的形状和大小。

参数说明:

  • new_shape:接收整数组成的元组,或者整数。元组为更改后的数组形状,例如(2,3)两行三列。
  • refcheck:接收bool类型的值。默认为True,如果改为False,则不会检查引用计数。

返回值:

示例:

>>> 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')

参数说明:

  • 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])

返回一个被延展拉平的数组,数据不独立,与原数组共享数据。

参数说明:

  • order:可选{‘C’,’F’, ‘A’, ‘K’}

返回值:

  • ndarray

示例:

>>> 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')

返回延展成为一维数组的副本。

参数说明:

  • order:可选{‘C’, ‘F’, ‘A’, ‘K’},默认’C’

返回值:ndarray

  • 一维数组的副本。

示例:

>>> a = np.array([[1,2], [3,4]])
>>> a
array([[1, 2],
       [3, 4]])
>>> a.flatten() # 返回的是副本,数据与原数组a独立。
array([1, 2, 3, 4])

以上三种改变数组形状的介绍,可以根据实际应用场景选择相应的变换方法,每种变化方法下有对应的函数,前期学习先掌握函数可以实现什么功能,不用去记语法,函数的参数实在不停的使用过程中掌握的。

猜你喜欢

转载自blog.csdn.net/shield911/article/details/124225072