numpy中hsplit()、vsplit()、array_split()的使用说明

每个人有每个人对 numpy 中 hsplit() 和 vsplit() 的解释方法,所以无论怎么去解释它,只要结果正确,是我们想要的就可以。

1. hsplit()函数的使用

numpy 官方说明中的解释是:

@array_function_dispatch(_hvdsplit_dispatcher)
def hsplit(ary, indices_or_sections):
    """
    Split an array into multiple sub-arrays horizontally (column-wise).

    Please refer to the `split` documentation.  `hsplit` is equivalent
    to `split` with ``axis=1``, the array is always split along the second
    axis regardless of the array dimension.

    See Also
    --------
    split : Split an array into multiple sub-arrays of equal size.

我的理解是:hsplit(),指按照横轴方向,对数组进行分割操作。
举个例子:

A = np.arange(12).reshape(3, 4)
print(np.hsplit(A, 2))

输出结果:

[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

值得注意的是hsplit(A,2)这种形式,只适用于均等拆分,而无法做到hsplit(A,3)。即无法按照横轴方向将数组均等拆分成3部分。

再举个例子:

A = np.arange(24).reshape(4, 6)
i = np.hsplit(A, np.array([24]))
print(i)

输出结果:

[array([[ 0,  1],
       [ 6,  7],
       [12, 13],
       [18, 19]]), array([[ 2,  3],
       [ 8,  9],
       [14, 15],
       [20, 21]]), array([[ 4,  5],
       [10, 11],
       [16, 17],
       [22, 23]])]

这里需要理解的是:i 中 np.array([2, 4]) 的实际意义。
np.array([2, 4])的输出结果为[2, 4],所以 i = np.hsplit(A, [2, 4])
我对上式的理解为: A 按照横轴方向,在索引位置为2、4处进行拆分。

2. vsplit()函数的使用

原理同 hsplit() 一模一样

3.array_split()函数的使用

计算过程为:

A = np.arange(12).reshape(3, 4)
D = np.array_split(A, 3, axis=1)
print(D)

输出结果为:

[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]

我的理解是:将 A 数组 按横轴(axis=1)方向接近均等地拆封成3部分。虽说是均等,实际是将不均等的部分给了第一部分,让整体看起来显得接近均等拆分。
再举个例子比较下:

A = np.arange(24).reshape(4, 6)
D = np.array_split(A, 4, axis=1)
print(D)

输出结果为:

[array([[ 0,  1],
       [ 6,  7],
       [12, 13],
       [18, 19]]), array([[ 2,  3],
       [ 8,  9],
       [14, 15],
       [20, 21]]), array([[ 4],
       [10],
       [16],
       [22]]), array([[ 5],
       [11],
       [17],
       [23]])]

其中,第一部分和第二部分均是两列,三四部分各为一列。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值