按照numpy的文檔的把它做同樣的事情爲「花哨」的索引(索引陣列使用數組)。
的第二個參數np.take
必須是陣列狀(陣列,列表,元組等),而不是一個對象slice
。你可以構建一個索引數組或列表,做你想要的片斷:
a = np.arange(24).reshape(2, 3, 4)
np.take(a, slice(1, 4, 2), 2)
# TypeError: long() argument must be a string or a number, not 'slice'
np.take(a, range(1, 4, 2), 2)
# array([[[ 1, 3],
# [ 5, 7],
# [ 9, 11]],
# [[13, 15],
# [17, 19],
# [21, 23]]])
什麼是指數的最好方式使用切片以及僅在運行時知道的軸的陣列?
我最喜歡做的是使用np.rollaxis
來使軸索引到第一個中,做我的索引,然後回滾到原來的位置。
例如,讓我們說,我想沿着第3軸的三維陣列的奇數編號的切片:
sliced1 = a[:, :, 1::2]
如果我當時就想指定軸沿在運行時切片,我能做到這一點像這樣的:
n = 2 # axis to slice along
sliced2 = np.rollaxis(np.rollaxis(a, n, 0)[1::2], 0, n + 1)
assert np.all(sliced1 == sliced2)
要解開一個班輪一點:
# roll the nth axis to the 0th position
np.rollaxis(a, n, 0)
# index odd-numbered slices along the 0th axis
np.rollaxis(a, n, 0)[1::2]
# roll the 0th axis back so that it lies before position n + 1 (note the '+ 1'!)
np.rollaxis(np.rollaxis(a, n, 0)[1::2], 0, n + 1)
請提供一個可運行的例子,以及你的前回復 – 2015-02-23 22:34:40
有些代碼呢?因爲我沒有看到或理解你的問題,這對我來說很好[np.take(a,a [3:7])'這是通過數組索引數組。 – ljetibo 2015-02-23 22:34:48