【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵

首先,使用下面的代码,创建3个2×2的矩阵A、B、C。

import numpy as np
A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
C = [[9, 9], [9, 9]]

【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第1张图片

二维矩阵->二维矩阵

在python中,进行矩阵拼接的语句为:

M = np.concatenate((m1, m2, m3), axis=k)

其中,m1、m2、m3为需要进行拼接的矩阵,axis表示为在哪一个维度进行拼接。
例如:

M = np.concatenate((A, B, C), axis=0)

这行语句表示将A、B、C三个矩阵在第0维(列方向)进行拼接,那么得到的M矩阵为:
【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第2张图片
如果使用的axis为1(行方向),即:

M = np.concatenate((A, B, C), axis=1)

那么得到的拼接矩阵如下:
【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第3张图片

二维矩阵->三维矩阵

从上面的演示可知,通过选择不同的axis值,可以使矩阵在不同的维度进行拼接,那么我如果想让A、B、C三个矩阵堆叠在一起,形成一个2×2×3的三维矩阵呢?
例如,希望得到如下矩阵:
【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第4张图片
显然直接改成axis=2是行不通的。

M = np.concatenate((A, B, C), axis=2)

因为会产生如下报错:

Traceback (most recent call last):
  File "D:\Anaconda\envs\py37\lib\code.py", line 90, in runcode
    exec(code, self.locals)
  File "", line 1, in <module>
  File "<__array_function__ internals>", line 6, in concatenate
numpy.AxisError: axis 2 is out of bounds for array of dimension 2

Error中提示的很明显,这三个矩阵没有”2“这个维度,他们只有”0“和”1“两个维度
因此,需要进行维度拓展,将三个2×2的矩阵拓展为三个2×2×1的矩阵,这样他们便拥有了”2“这个维度,做法如下:

A = np.expand_dims(A,axis=2)
B = np.expand_dims(B,axis=2)
C = np.expand_dims(C,axis=2)

使用这三条语句,就会产生如下变化:
【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第5张图片
即A、B、C三个矩阵从2×2的维度,升维成了2×2×1的维度。
接下来再执行刚刚的那拼接矩阵语句:

M = np.concatenate((A, B, C), axis=2)

那么就会得到如下形式的矩阵:
【python】详解使用numpy模块来拼接矩阵,二维矩阵和三维矩阵_第6张图片
矩阵M的维度变成了2×2×3。

你可能感兴趣的:(numpy,python,矩阵)