numpy.take#

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

沿轴从数组中获取元素.

当 axis 不是 None 时,此函数执行与“fancy”索引(使用数组对数组进行索引)相同的事情;但是,如果您需要沿给定轴的元素,则使用它可能更容易.诸如 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]
参数:
aarray_like (Ni…, M, Nk…)

源数组.

indicesarray_like (Nj…)

要提取的值的索引.也允许使用标量作为索引.

axis整数,可选

要在其上选择值的轴.默认情况下,使用展平的输入数组.

outndarray, optional (Ni…, Nj…, Nk…)

如果提供,结果将放置在此数组中.它应该具有适当的形状和 dtype.请注意,如果 mode=’raise’ ,则始终缓冲 out ;使用其他模式以获得更好的性能.

模式{‘raise’, ‘wrap’, ‘clip’},可选

指定越界索引的行为.

  • ‘raise’ – 引发错误 (默认)

  • ‘wrap’ – 环绕

  • ‘clip’ – 裁剪到范围

“clip”模式意味着所有过大的索引都将被替换为寻址该轴上最后一个元素的索引.请注意,这会禁用使用负数进行索引.

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

返回的数组与 a 具有相同的类型.

参见

compress

使用布尔掩码获取元素

ndarray.take

等效方法

take_along_axis

通过匹配数组和索引数组来获得元素

注释

通过消除上述描述中的内部循环,并使用 s_ 构建简单的切片对象, take 可以通过将花式索引应用于每个 1-D 切片来表示:

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]])