跳至主要內容

NumPy数组规整

Akkiri...大约 3 分钟数据分析机器学习PythonPython

堆叠

沿行堆叠

下面将展示三种办法将两个等长一维数组沿行 axis = 0 方向堆叠,结果为二维数组。

  • numpy.stack() 函数将沿着指定轴将多个数组堆叠在一起,返回一个新的数组,默认轴为 axis = 0。

  • numpy.row_stack() 函数将多个数组沿着行方向进行堆叠,生成一个新的数组。

  • numpy.vstack() 将多个数组沿着垂直方向(行方向)进行堆叠,生成一个新的数组。

下面是使用例:

import numpy as np

a = np.arange(1, 5+1)
b = np.arange(-5, -1+1)

Stack = np.stack((a, b))
Row_stack = np.row_stack((a, b))
Vstack = np.vstack((a, b))
# [[ 1  2  3  4  5]
#  [-5 -4 -3 -2 -1]]

沿列堆叠

下面将展示三种办法将两个等长一维数组沿列 axis = 1 方向堆叠,结果为二维数组。

  • numpy.stack() 函数将沿着指定轴将多个数组堆叠在一起,将参数 axis 设置为 1。

  • numpy.column_stack() 将多个一维数组沿着列方向进行堆叠,生成一个新的二维数组

  • numpy.hstack() 将多个数组沿着水平方向 (列方向) 进行堆叠,生成一个新的数组。注意:用 numpy.hstack() 堆叠一维数组的结果还是一个一维数组。为了获得与上面相似的结果,需要先将两个一维数组变形为列向量,然后用 numpy.hstack() 函数沿列堆叠。

下面是使用例:

import numpy as np

a = np.arange(1, 5+1)
b = np.arange(-5, -1+1)

Stack = np.stack((a, b), axis=1)
Column_stack = np.column_stack((a, b))
Hstack = np.hstack((a.reshape(-1, 1), b.reshape(-1, 1)))
# [[ 1 -5]
#  [ 2 -4]
#  [ 3 -3]
#  [ 4 -2]
#  [ 5 -1]]

提示

利用 np.stack(),我们还可以将二维数组堆叠为三维数组,堆叠方式如下图所示:

沿着三个不同方向堆叠
沿着三个不同方向堆叠

拼接

我们还可以用 numpy.concatenate() 完成数组拼接。利用 numpy.concatenate(), 我们可以分别完成沿行、列方向数组拼接。

下面是使用例:

import numpy as np

a = np.array([[1, 2, 3], [5, 6, 7], [9, 10, 11]])
b = np.array([[13, 14, 15]])
c = np.array([[4], [8], [12]])

axis0 = np.concatenate((a, b), axis=0)
# [[ 1  2  3]
#  [ 5  6  7]
#  [ 9 10 11]
#  [13 14 15]]

axis1 = np.concatenate((a, c), axis=1)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]

重复

numpy.repeat()numpy.tile() 都可以用来重复数据。numpy.repeat()numpy.tile() 的区别在于重复的对象不同。numpy.repeat() 重复的是数组中的每个元素。numpy.repeat() 还可以指定具体的轴,以及不同元素重复的次数;而 numpy.tile() 重复的是整个数组。

下面是使用例:

import numpy as np

a = np.arange(1, 3+1)

b = np.repeat(a, 3)
# [1 1 1 2 2 2 3 3 3]

c = np.tile(a, 3)
# [1 2 3 1 2 3 1 2 3]

分块矩阵

合成

numpy.block() 函数用于将多个数组沿不同的轴组合成一个分块矩阵。它接受一个嵌套列表作为输入,每个列表代表一个块矩阵,然后根据指定的轴将这些块矩阵组合在一起。

下面以四个小矩阵合成一个大矩阵为例:

import numpy as np

a = np.array([[1, 1, 1], [1, 1, 1]])
b = np.array([[2, 2], [2, 2]])
c = np.array([[3, 3]])
d = np.array([[4, 4, 4]])

M = np.block([[a, b], [c, d]])
# [[1 1 1 2 2]
#  [1 1 1 2 2]
#  [3 3 4 4 4]]

切割

numpy.split() 函数可以将一个数组沿指定轴分割为多个子数组。numpy.split() 接受三个参数:要分割的数组、分割的索引位置、沿着哪个轴进行分割。

下面以一维数组三等分得到三个子数组为例:

import numpy as np

a = np.arange(1, 6+1)

b, c, d = np.split(a, 3)
# b=[1, 2], c=[3, 4], d=[5, 6]

numpy.split() 还可以将二维数组沿不同轴三等分。另外使用 numpy.hsplit()numpy.vsplit() 也完成类似操作。如下图:

将二维数组三等分,沿不同轴
将二维数组三等分,沿不同轴

提示

其它的函数还有 numpy.append()numpy.insert()numpy.delete() 可以完成附加、插入、删除操作。

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5