NumPy怎么实现数组分割?(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 nparr = 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]])]