2017-06-27 32 views
4

我試圖從數組中切出列並將其分配給一個新變量,如下所示。在一個數組中索引兩組列

array1 = array[:,[0,1,2,3,15,16,17,18,19,20]] 

有沒有像這樣的捷徑?

我想這一點,但它拋出一個錯誤:

array1 = array[:,[0:3,15:20]] 

這可能是很簡單,但我不能在任何地方找到它。

+0

那些數組或列表?如果它們是numpy數組,則有像'numpy.r_'這樣的快捷方式。 – ayhan

回答

4

使用np.r_

Translates slice objects to concatenation along the first axis.

import numpy as np 
arr = np.arange(100).reshape(5, 20) 
cols = np.r_[:3, 15:20] 

print(arr[:, cols]) 
[[ 0 1 2 15 16 17 18 19] 
[20 21 22 35 36 37 38 39] 
[40 41 42 55 56 57 58 59] 
[60 61 62 75 76 77 78 79] 
[80 81 82 95 96 97 98 99]] 

在一天結束的時候,大概只有一點點比你現在所擁有的那麼詳細,但可以派上用場了更復雜的情況。

+0

不應該是'np.r _ [:3,15:20]'? –

+0

謝謝,修復 –

3

對於大多數簡單的情況就是這樣,最好的和最簡單的方法是使用串聯:

array1 = array[0:3] + array[15:20] 

對於更復雜的情況下,你需要使用自定義切片,如與NumPy的s_,這允許多個有空位的切片,用逗號分隔。你可以閱讀它here。此外,如果您的切片遵循一種模式(即獲得5,跳過10,獲得5等),則可以使用itertools.compress,如用戶ncoghlanthis中解釋的答案。

+2

就像一個警告,這適用於*列表*,但如果尺寸不能廣播,numpy數組當然會增加或出錯。 –

0

你可以使用list(range(0, 4)) + list(range(15, 20))