切出一个numpy数组的部分的Pythonic方式

Nés*_*tor 9 python arrays numpy

假设您有以下numpy数组,

>>> x = numpy.array([0,1,2,3,4,5,6,7,8,9,10])
Run Code Online (Sandbox Code Playgroud)

并且你想提取一个新的numpy数组,只包含前三(3)和最后四(4)个元素,即

>>> y = x[something]
>>> print y
[0 1 2 7 8 9 10]
Run Code Online (Sandbox Code Playgroud)

这可能吗?我知道要提取前面提到的前三个数字x[:3]并提取你做的最后四个数字x[-4:],但有一种简单的方法可以在一个简单的切片中提取所有这些数字吗?我知道这可以通过例如追加两个电话来完成,

 >>> y = numpy.append(x[:3],x[-4:])  
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有一些简单的小技巧以更直接,更pythonic的方式来做,而不必x再次参考(即,我首先想到也许x[-4:3]可以工作,但我立刻意识到它没有意义).

luk*_*k32 4

我认为你应该使用索引数组

indices = list(range(3))+list(range(-4,0))
y = x[indices]
Run Code Online (Sandbox Code Playgroud)

您可能可以删除list强制转换(不确定,因为 python 3 稍微改变了行为)。或者您可以使用numpy范围生成器。

编辑:不知道为什么投反对票,因为它有效

import numpy
x = numpy.array([0,1,2,3,4,5,6,7,8,9,10])
indices = list(range(3))+list(range(-4,0))
y = x[indices]
print(y)
Run Code Online (Sandbox Code Playgroud)