numpy.take#
- numpy.take(a, indices, axis=None, out=None, mode='raise')[source]#
沿著軸從陣列中提取元素。
當 axis 不是 None 時,此函數的作用與「花式」索引(使用陣列為陣列建立索引)相同;但是,如果您需要沿著給定軸的元素,則使用起來可能更容易。 諸如
np.take(arr, indices, axis=3)
的呼叫等效於arr[:,:,:,indices,...]
。若不使用花式索引來解釋,這等效於以下
ndindex
的用法,它將ii
、jj
和kk
各自設定為索引的元組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]])