You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy split()传入(2,1)索引,为何输出的C从第1索引开始?

关于numpy.split传入乱序索引的疑问

我故意以(2,1)的顺序传入索引运行如下代码:

import numpy as np
a1 = np.arange(30).reshape(5, 6)
print(a1)
a, b, c = np.split(a1, (2, 1))
print("A is", a)
print("B is", b)
print("C is", c)

得到的输出为:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]
A is [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
B is []
C is [[ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]

我明白因使用索引(2,1)导致b为空,但不理解为何输出的c从第1索引开始?


原因解释

numpy.split的分割逻辑是直接按你传入的分割点顺序,对原数组进行切片划分:

  • 当传入(x,y)作为分割点时,数组会被分成三部分:原数组[:x]、原数组[x:y]、原数组[y:]
  • 若x > y,原数组[x:y]会因为起始索引大于结束索引变成空数组,但第三部分原数组[y:]不受前一个分割点的影响,依然从y位置开始取到数组末尾

对应到你的代码:

  1. 第一个分割点是2,所以a = a1[:2],即数组的前两行
  2. 第二个分割点是1,所以b = a1[2:1],因为2>1,这个切片为空
  3. 最后一部分c = a1[1:],也就是从原数组第1行开始到末尾的所有元素,这就是你看到的c的内容

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:25:28