每个人有每个人对 numpy 中 hsplit() 和 vsplit() 的解释方法,所以无论怎么去解释它,只要结果正确,是我们想要的就可以。
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([2,4]))
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处进行拆分。
原理同 hsplit() 一模一样
计算过程为:
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]])]
其中,第一部分和第二部分均是两列,三四部分各为一列。