我試圖從數組中切出列並將其分配給一個新變量,如下所示。在一個數組中索引兩組列
array1 = array[:,[0,1,2,3,15,16,17,18,19,20]]
有沒有像這樣的捷徑?
我想這一點,但它拋出一個錯誤:
array1 = array[:,[0:3,15:20]]
這可能是很簡單,但我不能在任何地方找到它。
我試圖從數組中切出列並將其分配給一個新變量,如下所示。在一個數組中索引兩組列
array1 = array[:,[0,1,2,3,15,16,17,18,19,20]]
有沒有像這樣的捷徑?
我想這一點,但它拋出一個錯誤:
array1 = array[:,[0:3,15:20]]
這可能是很簡單,但我不能在任何地方找到它。
使用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]]
在一天結束的時候,大概只有一點點比你現在所擁有的那麼詳細,但可以派上用場了更復雜的情況。
不應該是'np.r _ [:3,15:20]'? –
謝謝,修復 –
對於大多數簡單的情況就是這樣,最好的和最簡單的方法是使用串聯:
array1 = array[0:3] + array[15:20]
對於更復雜的情況下,你需要使用自定義切片,如與NumPy的s_
,這允許多個有空位的切片,用逗號分隔。你可以閱讀它here。此外,如果您的切片遵循一種模式(即獲得5,跳過10,獲得5等),則可以使用itertools.compress
,如用戶ncoghlan在this中解釋的答案。
就像一個警告,這適用於*列表*,但如果尺寸不能廣播,numpy數組當然會增加或出錯。 –
你可以使用list(range(0, 4)) + list(range(15, 20))
那些數組或列表?如果它們是numpy數組,則有像'numpy.r_'這樣的快捷方式。 – ayhan