矩阵拼接
先建立 2 个numpy矩阵:
import numpy as np
# 新建2个numpy矩阵
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([[7, 8, 9], [10, 11, 12]])
print("a1:\n", a1)
print("a2:\n", a2)
上面的代码,得到的两个 numpy 矩阵分别为:
a1:
[[1 2 3]
[4 5 6]]
a2:
[[ 7 8 9]
[10 11 12]]
水平拼接(沿着axis=1的方向)
- np.hstack(), h 指水平 (horizontal),stack 是堆叠的意思。
np.hstack((a1, a2))
- np.c_[ ], c 指矩阵的列 (column)。
np.c_[a1, a2]
- np.concatenate()
np.concatenate((a1, a2), axis=1)
上面的三种方法,都可以得到水平拼接的结果:
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
垂直拼接(沿着axis=0的方向)
- np.vstack(), v 指的是垂直 (vertical), stack 是堆叠的意思。
np.vstack((a1, a2))
- np.r_[ ], r 指矩阵的行 (row)。
np.r_[a1, a2]
- np.concatenate()
np.concatenate((a1, a2), axis=0)
上面的三种方法,都可以得到垂直的拼接结果:
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
矩阵分割
先创建两个矩阵,方便后面进行分隔。
b1 = np.arange(1, 7).reshape(2, 3)
b2 = np.arange(7, 19).reshape(3, 4)
print("b1:\n", b1)
print("b2:\n", b2)
上面的代码,可以得到两个矩阵分别为:
b1:
[[1 2 3]
[4 5 6]]
b2:
[[ 7 8 9 10]
[11 12 13 14]
[15 16 17 18]]
水平分割(沿着axis=1的方向)
- np.hsplit(), h 指水平 (horizontal), split 是分割的意思。
np.hsplit(b1, 3) # 参数 3 指的是将 b1 矩阵均分为3份,矩阵第 1 维的列数必须是3的倍数,否则报错。
np.hsplit(b2, 2) # 参数 2 指的是将 b2 矩阵均分为2份。
- np.split()
np.split(b1, 3, axis=1)
np.split(b2, 2, axis=1)
这两种水平分割的方法,都可以得到如下被分割的矩阵结果。
b1矩阵被分为水平分割为 3 份,b2矩阵被分割为 2 份。
[array([[1],
[4]]),
array([[2],
[5]]),
array([[3],
[6]])]
[array([[ 7, 8],
[11, 12]]),
array([[ 9, 10],
[13, 14]])]
垂直分割(沿着axis=0的方向)
- np.vsplit(), v 指的是垂直 (vertical), split 是分割的意思。
np.vsplit(b1, 2) # 参数 2 表示将矩阵 b1 分割为 2 份。b1 矩阵的第 0 维的行数必须是 2 的倍数,否则报错。
np.vsplit(b2, 3) # 参数 3 表示将矩阵 b2 分割为 3 份。
- np.split()
np.split(b1, 2, axis=0)
np.split(b2, 3, axis=0)
这两种垂直分割的方法,都可以得到如下被分割的矩阵结果。
[array([[1, 2, 3]]), array([[4, 5, 6]])]
[array([[ 7, 8, 9, 10]]), array([[11, 12, 13, 14]]), array([[15, 16, 17, 18]])]