當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python dask.array.take用法及代碼示例


用法:

dask.array.take(a, indices, axis=0)

沿軸從數組中獲取元素。

此文檔字符串是從 numpy.take 複製的。

可能存在與 Dask 版本的一些不一致之處。

當axis不是None時,這個函數和“fancy” indexing(使用數組索引數組)做同樣的事情;但是,如果您需要沿給定軸的元素,它會更容易使用。諸如 np.take(arr, indices, axis=3) 之類的調用等效於 arr[:,:,:,indices,...]

在沒有花哨的索引的情況下進行解釋,這等效於以下使用 ndindex ,它將 ii , jjkk 中的每個設置為索引元組:

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]

參數

a數組 (Ni…, M, Nk…)

源數組。

indices數組 (Nj…)

要提取的值的索引。

還允許索引的標量。

axis整數,可選

選擇值的軸。默認情況下,使用扁平化的輸入數組。

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

如果提供,結果將被放置在這個數組中。它應該具有適當的形狀和數據類型。請注意,如果 mode=’raise’ ,則始終緩衝 out ;使用其他模式以獲得更好的性能。

mode{‘raise’, ‘wrap’, ‘clip’},可選(Dask 不支持)

指定越界索引的行為方式。

  • ‘raise’ - 引發錯誤(默認)
  • ‘wrap’ - 環繞
  • ‘clip’ - 剪輯到範圍

‘clip’ 模式意味著所有過大的索引都將替換為尋址沿該軸的最後一個元素的索引。請注意,這會禁用負數索引。

返回

outndarray (Ni…, Nj…, Nk…)

返回的數組與 a 具有相同的類型。

注意

通過消除上述說明中的內部循環,並使用s_ 構建簡單的切片對象,take 可以表示為對每個一維切片應用精美的索引:

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)

例子

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

在此示例中,如果 a 是 ndarray,則可以使用 “fancy” 索引。

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

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

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

相關用法


注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.take。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。