Numpy矩阵(二维)拼接与分割方法

矩阵拼接

先建立 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的方向)

  1. np.hstack(), h 指水平 (horizontal),stack 是堆叠的意思。
np.hstack((a1, a2))
  1. np.c_[ ], c 指矩阵的列 (column)。
np.c_[a1, a2]
  1. np.concatenate()
np.concatenate((a1, a2), axis=1)

上面的三种方法,都可以得到水平拼接的结果:

[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

垂直拼接(沿着axis=0的方向)

  1. np.vstack(), v 指的是垂直 (vertical), stack 是堆叠的意思。
np.vstack((a1, a2))
  1. np.r_[ ], r 指矩阵的行 (row)。
np.r_[a1, a2]
  1. 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的方向)

  1. np.hsplit(), h 指水平 (horizontal), split 是分割的意思。
np.hsplit(b1, 3)  # 参数 3 指的是将 b1 矩阵均分为3份,矩阵第 1 维的列数必须是3的倍数,否则报错。
np.hsplit(b2, 2)  # 参数 2 指的是将 b2 矩阵均分为2份。
  1. 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的方向)

  1. np.vsplit(), v 指的是垂直 (vertical), split 是分割的意思。
np.vsplit(b1, 2)  # 参数 2 表示将矩阵 b1 分割为 2 份。b1 矩阵的第 0 维的行数必须是 2 的倍数,否则报错。
np.vsplit(b2, 3)  # 参数 3 表示将矩阵 b2 分割为 3 份。
  1. 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]])]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值