首先,使用下面的代码,创建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中,进行矩阵拼接的语句为:
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矩阵为:
如果使用的axis为1(行方向),即:
M = np.concatenate((A, B, C), axis=1)
那么得到的拼接矩阵如下:
二维矩阵->三维矩阵
从上面的演示可知,通过选择不同的axis值,可以使矩阵在不同的维度进行拼接,那么我如果想让A、B、C三个矩阵堆叠在一起,形成一个2×2×3的三维矩阵呢?
例如,希望得到如下矩阵:
显然直接改成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 "<input>", 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)
使用这三条语句,就会产生如下变化:
即A、B、C三个矩阵从2×2的维度,升维成了2×2×1的维度。
接下来再执行刚刚的那拼接矩阵语句:
M = np.concatenate((A, B, C), axis=2)
那么就会得到如下形式的矩阵:
矩阵M的维度变成了2×2×3。