NumPy 数组分割

拆分是连接的反向操作。
连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。

数组分割的基本函数如下:

函数数组及操作
split将一个数组分割为多个子数组
hsplit将一个数组水平分割为多个子数组(按列)
vsplit将一个数组垂直分割为多个子数组(按行)

numpy.split

numpy.split 函数沿特定的轴将数组分割为子数组,格式如下:

numpy.split(ary, indices_or_sections, axis)

参数说明:

ary:被分割的数组indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭) axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分

import numpy as np
a = np.arange(15)
print ('第一个数组:')
print (a)
print ('\n')
print ('将数组分为三个大小相等的子数组:')
b = np.split(a,5)
print (b)
print ('\n')
print ('将数组在一维数组中表明的位置分割:')
b = np.split(a,[4,7])
print (b)

输出结果为:

第一个数组:
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
将数组分为三个大小相等的子数组:
[array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8]), array([ 9, 10, 11]), array([12, 13, 14])]
将数组在一维数组中表明的位置分割:
[array([0, 1, 2, 3]), array([4, 5, 6]), array([ 7, 8, 9, 10, 11, 12, 13, 14])]

当数组中的元素少于要求的数量,需要用array_split函数它将从末尾进行相应调整。

import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 4)
print(newarr)

输出结果为:

[array([1, 2]), array([3, 4]), array([5]), array([6])]
注意:用split() 方法,当源数组中的元素较少用于拆分时,它将不会调整元素,如上例那样,array_split() 正常工作,但 split() 会失败。

numpy.hsplit

numpy.hsplit 函数用于水平分割数组,通过指定要返回的相同形状的数组数量来拆分原数组。

import numpy as np
harr = np.floor(10 * np.random.random((2, 8)))
print ('原array:')
print(harr)
 
print ('拆分后:')
print(np.hsplit(harr, 4))

输出结果为:

原array:
[[7. 9. 2. 6. 8. 7. 4. 5.]
 [2. 5. 3. 5. 9. 4. 1. 3.]]
拆分后:
[array([[7., 9.],
       [2., 5.]]), array([[2., 6.],
       [3., 5.]]), array([[8., 7.],
       [9., 4.]]), array([[4., 5.],
       [1., 3.]])]

numpy.vsplit

numpy.vsplit 沿着垂直轴分割,其分割方式与hsplit用法相同。

import numpy as np
a = np.arange(16).reshape(4,4)
print ('第一个数组:')
print (a)
print ('\n')
print ('竖直分割:')
b = np.vsplit(a,2)
print (b)

输出结果为:

第一个数组:
[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]
 [12 13 14 15]]
竖直分割:
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
       [12, 13, 14, 15]])]