使用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位置开始取到数组末尾
对应到你的代码:
- 第一个分割点是2,所以
a = a1[:2],即数组的前两行 - 第二个分割点是1,所以
b = a1[2:1],因为2>1,这个切片为空 - 最后一部分
c = a1[1:],也就是从原数组第1行开始到末尾的所有元素,这就是你看到的c的内容
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

