当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。