2017-02-02 115 views
0

我正在尝试用指数数组切片Numpy数组。例如,用指数数组切片Numpy数组

array = [10,15,20,25,32,66] 
indices = [1,4,5] 

最佳输出将是

[[10][15,20,25,32][66]] 

我已经使用

array[indices] 

尝试,但这只是产生每个单独的索引的单个值,而不是所有的那些之间。

+0

究竟怎么做你的三个指数在阵列中表示。我真的不明白你如何从给定的输入获得你想要的输出。 – jotasi

+0

这些索引是通过np.where()获得的。所以基本上1,4,5这样的指数就会像这样对数组进行切片:0:1,1:4,4:5 –

+0

你称之为“最佳输出”不能是切片操作的产物,因为它有一个未定义的形状。 – ImportanceOfBeingErnest

回答

4

考虑使用np.split,像这样

array = np.asarray([10, 15, 20, 25, 32, 66]) 
indices = [1, 5] 

print(np.split(array, indices)) 

可生产

[array([10]), array([15, 20, 25, 32]), array([66])] 

split作为仅使用断点,其中索引表示将在哪个打破块的点。因此,不需要指示1:4,这是由断点1, 5隐式定义的。

+1

这个'np.split'多么有用的小功能!如果只有它可以做多个轴。 –

+0

这就是我想要的。谢谢。 –

0

根据your comment该发生器产生期望的结果:

def slice_multi(array, indices): 
    current = 0 
    for index in indices: 
     yield array[current:index] 
     current = index 

array = [10,15,20,25,32,66] 
indices = [1,4,5] 
list(slice(array, indices)) # [[10], [15, 20, 25], [32]] 
+0

这不会给出正确的输出。 – roganjosh

+0

当你把他的评论考虑进去的时候,他会说,最后一个片应该是'array [4:5]'确实是'[32]'。 – jotasi

+0

如评论所述,这会产生切片“[0:1],[1:4],[4:5]”的结果。我刚制作出符合评论的解决方案,因为它与原始问题中所述的不同。 –