拆分是连接的反向操作。
连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。
数组分割的基本函数如下:
函数 | 数组及操作 |
split | 将一个数组分割为多个子数组 |
hsplit | 将一个数组水平分割为多个子数组(按列) |
vsplit | 将一个数组垂直分割为多个子数组(按行) |
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])]
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 沿着垂直轴分割,其分割方式与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]])]