numpy.take#

numpy.take(a, indices, axis=None, out=None, mode='raise')[source]#

沿著軸從陣列中提取元素。

當 axis 不是 None 時,此函數的作用與「花式」索引(使用陣列為陣列建立索引)相同;但是,如果您需要沿著給定軸的元素,則使用起來可能更容易。 諸如 np.take(arr, indices, axis=3) 的呼叫等效於 arr[:,:,:,indices,...]

若不使用花式索引來解釋,這等效於以下 ndindex 的用法,它將 iijjkk 各自設定為索引的元組

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
Nj = indices.shape
for ii in ndindex(Ni):
    for jj in ndindex(Nj):
        for kk in ndindex(Nk):
            out[ii + jj + kk] = a[ii + (indices[jj],) + kk]
參數:
aarray_like (Ni…, M, Nk…)

來源陣列。

indicesarray_like (Nj…)

要提取的值的索引。 也允許將純量用於索引。

axisint,可選

要選擇值的軸。 預設情況下,使用展平的輸入陣列。

outndarray,可選 (Ni…, Nj…, Nk…)

如果提供,結果將放置在此陣列中。 它應該具有適當的形狀和 dtype。 請注意,如果 mode='raise',則始終會緩衝 out;使用其他模式可獲得更好的效能。

mode{‘raise’, ‘wrap’, ‘clip’},可選

指定超出範圍的索引將如何表現。

  • ‘raise’ – 引發錯誤(預設)

  • ‘wrap’ – 環繞

  • ‘clip’ – 裁剪到範圍

‘clip’ 模式表示所有過大的索引都將被替換為定址該軸上最後一個元素的索引。 請注意,這會停用使用負數進行索引。

返回:
outndarray (Ni…, Nj…, Nk…)

返回的陣列與 a 具有相同的類型。

另請參閱

compress

使用布林遮罩提取元素

ndarray.take

等效方法

take_along_axis

透過比對陣列和索引陣列來提取元素

註解

透過消除上述描述中的內部迴圈,並使用 s_ 來建構簡單的切片物件,take 可以表示為將花式索引應用於每個 1 維切片

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
for ii in ndindex(Ni):
    for kk in ndindex(Nj):
        out[ii + s_[...,] + kk] = a[ii + s_[:,] + kk][indices]

因此,它等效於(但比以下 apply_along_axis 的用法更快)

out = np.apply_along_axis(lambda a_1d: a_1d[indices], axis, a)

範例

>>> import numpy as np
>>> a = [4, 3, 5, 7, 6, 8]
>>> indices = [0, 1, 4]
>>> np.take(a, indices)
array([4, 3, 6])

在此範例中,如果 a 是 ndarray,「花式」索引可以使用。

>>> a = np.array(a)
>>> a[indices]
array([4, 3, 6])

如果 indices 不是一維的,則輸出也具有這些維度。

>>> np.take(a, [[0, 1], [2, 3]])
array([[4, 3],
       [5, 7]])