numpy.take

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

沿轴从数组中提取元素。

当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]
参数
a数组类(ni…,m,nk…)

源数组。

indices数组类(nj…)

要提取的值的索引。

1.8.0 新版功能.

还允许索引的标量。

axis可选的

选择值的轴。默认情况下,使用展平的输入数组。

outNdarray,可选(ni…,nj…,nk…)

如果提供,结果将放置在此数组中。它应该有适当的形状和类型。请注意 out 总是缓冲,如果 mode='raise' ;使用其他模式以获得更好的性能。

mode'raise'、'wrap'、'clip',可选

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

  • “raise”--引发错误(默认)

  • “环绕”—环绕

  • '剪辑'--剪辑到范围

“clip”模式意味着所有太大的索引都将替换为沿该轴寻址最后一个元素的索引。请注意,这将禁用负数索引。

返回
outNdarray(镍…,新泽西…,NK…)

返回的数组的类型与 a .

参见

compress

使用布尔掩码获取元素

ndarray.take

等效法

take_along_axis

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

笔记

通过消除上述描述中的内部循环,并使用 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 是一个标准数组,可以使用“花式”索引。

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

如果 indices 不是一维的,输出也有这些维度。

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