阅读 174

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]])]


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐