numpy基础: np.split()

本文介绍了split函数,它可将数组从左到右按顺序切分。说明了其参数含义,如ary为要切分的数组等。还提及机器学习中的用法,包括纵向、横向、不均等分割等。指出split与array_split的差别,split必须均等分,否则报错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

split(ary, indices_or_sections, axis=0)
把一个数组从左到右按顺序切分

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

一般用法:

>>> x = np.arange(9.0)
>>> np.split(x, 3)
[array([ 0.,  1.,  2.]), array([ 3.,  4.,  5.]), array([ 6.,  7.,  8.])]
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([ 0.,  1.,  2.]),
 array([ 3.,  4.]),
 array([ 5.]),
 array([ 6.,  7.]),
 array([], dtype=float64)]

m = np.arange(8.0)
n = np.split(m, (3,))
print(n)
结果:[array([0., 1., 2.]), array([3., 4., 5., 6., 7.])]

机器学习中的用法解释:

#axis=1,代表列,是要把data数据集中的所有数据按第四、五列之间分割为X集和Y集。
x, y = np.split(data, (4,), axis=1)

纵向分割, 分成两部分, 按列分割

print np.split(A, 2, axis = 1)

横向分割, 分成三部分, 按行分割

print np.split(A, 3, axis = 0)

不均等分割

print np.array_split(A, 3, axis = 1)

垂直方向分割

print np.vsplit(A, 3)

水平方向分割

print np.hsplit(A, 2)

与array_split的差别:split必须要均等分,否则会报错。array_split不会

import numpy as np
x = np.arange(8.0)
print np.array_split(x,3)
print np.split(x, 3)

其他详见:
https://blog.youkuaiyun.com/mingyuli/article/details/81227629

<think>我们正在讨论NumPy中的`split`函数。该函数用于将数组分割成多个子数组。让我们详细解释其使用规律和行为。 ### 函数签名 `numpy.split(ary, indices_or_sections, axis=0)` ### 参数说明 1. **ary**: 要分割的输入数组。 2. **indices_or_sections**: 这个参数可以是整数或者一维数组。 - 如果是整数`N`,表示将数组沿指定轴均等分割成`N`个子数组。如果不能均等分割,会引发`ValueError`。 - 如果是一维数组,则数组中的元素表示沿指定轴的切分点(索引)。例如,`[2, 5]`表示在索引2和索引5处进行切分,将数组分成三部分:`[0:2]`, `[2:5]`, `[5:]`。 3. **axis**: 指定分割的轴(维度),默认为0(第一个维度)。 ### 返回值 返回一个包含子数组的列表。 ### 使用示例 #### 示例1:均等分割 ```python import numpy as np a = np.arange(9) # [0, 1, 2, 3, 4, 5, 6, 7, 8] # 将数组a分成3个等长的子数组 b = np.split(a, 3) print(b) # [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])] ``` #### 示例2:按索引位置分割 ```python a = np.arange(9) # 在索引3和索引7处分割 b = np.split(a, [3, 7]) print(b) # [array([0, 1, 2]), array([3, 4, 5, 6]), array([7, 8])] ``` #### 示例3:沿其他轴分割 ```python a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # 沿行分割(axis=0)成2等份 b = np.split(a, 2, axis=0) print(b) # [array([[1, 2, 3], [4, 5, 6]]), array([[ 7, 8, 9], [10, 11, 12]])] # 沿列分割(axis=1)在索引1处分割 c = np.split(a, [1], axis=1) print(c) # [array([[1], [4], [7], [10]]), array([[ 2, 3], [ 5, 6], [ 8, 9], [11, 12]])] ``` ### 注意事项 - 当使用整数分割时,数组必须能够被均分,否则会报错。例如,长度为9的数组可以分成3等份(每份3个元素),但无法分成4等份(因为9/4不是整数)。 - 当使用索引列表分割时,索引列表中的值必须在数组的轴长度范围内,且通常是递增的。 - 分割点表示的是分割后的子数组的起始位置。例如,索引列表`[i, j]`表示第一个子数组是`ary[0:i]`,第二个是`ary[i:j]`,第三个是`ary[j:]`。 ### 相关函数 NumPy还提供了其他分割函数,如: - `array_split`: 类似于`split`,但允许不均等分割(不会报错)。 - `vsplit`: 沿垂直方向(行)分割,等价于`split(..., axis=0)`。 - `hsplit`: 沿水平方向(列)分割,等价于`split(..., axis=1)`。 ### 示例:不均等分割(使用array_split) ```python a = np.arange(9) # 尝试分成4份,不等分 b = np.array_split(a, 4) print(b) # [array([0, 1, 2]), array([3, 4, 5]), array([6, 7]), array([8])] ``` ### 总结 `numpy.split`是一个强大的数组分割工具,通过指定分割点或分割份数,可以灵活地将数组分割成多个子数组。注意分割的均等性要求,以及索引点的指定方式。 §§相关问题§§ 1. `numpy.split`和`numpy.array_split`有什么区别? 2. 如何沿多维数组的不同轴进行分割? 3. 在分割数组时,如果索引超出范围会发生什么? 4. 能否使用`numpy.split`分割字符串数组? 5. 如何将分割后的子数组合并回原数组?</think>### NumPy `split` 函数使用详解 `numpy.split()` 函数用于将数组沿指定轴分割成多个子数组,其核心行为取决于第二个参数 `indices_or_sections` 的类型: #### 函数签名 ```python numpy.split(ary, indices_or_sections, axis=0) ``` - **ary**: 要分割的输入数组 - **indices_or_sections**: - 若为**整数 N**:将数组**均等分割**为 N 个子数组 - 若为**索引列表**:在指定索引位置分割 - **axis**: 分割的轴向(默认为 0) --- ### 使用规律与行为 #### 1. 均等分割(整数参数) **要求**: 数组沿分割轴的长度必须能被整除 ```python import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) result = np.split(arr, 3) # 分成3等份 # [array([1, 2]), array([3, 4]), array([5, 6])] ``` 若无法整除会报错: ```python np.split(arr, 4) # ValueError: array split does not result in an equal division ``` #### 2. 按索引分割(列表参数) 在指定索引位置切分: ```python arr = np.array([1, 2, 3, 4, 5, 6]) result = np.split(arr, [2, 4]) # 在索引2和4处分割 # [array([1, 2]), array([3, 4]), array([5, 6])] ``` #### 3. 多维数组分割 沿指定轴操作: ```python matrix = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) # 沿行分割(axis=0) np.split(matrix, 2, axis=0) # [array([[1, 2], [3, 4]]), array([[5, 6], [7, 8]])] # 沿列分割(axis=1) np.split(matrix, [1], axis=1) # [array([[1], [3], [5], [7]]), array([[2], [4], [6], [8]])] ``` #### 4. 特殊分割函数 - `np.hsplit()`: 水平分割(等价于 `axis=1`) - `np.vsplit()`: 垂直分割(等价于 `axis=0`) - `np.array_split()`: 支持不等分分割 --- ### 关键特性总结 | 行为 | 触发条件 | 结果示例 | |------|----------|----------| | 均等分割 | `indices_or_sections` 为整数 | `split([1,2,3,4], 2) → [[1,2],[3,4]]` | | 索引分割 | `indices_or_sections` 为列表 | `split([1,2,3,4], [1,3]) → [[1],[2,3],[4]]` | | 多维操作 | 指定 `axis` 参数 | 沿行/列分割矩阵 | | 错误处理 | 无法整除时 | 抛出 `ValueError` | > ⚠️ **注意**:当需要不等分分割时,应使用 `np.array_split()` 替代: > ```python > np.array_split([1,2,3,4,5], 3) # 返回3个子数组,长度可能不同 > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值