numpy.take#
- numpy.take(a, indices, axis=None, out=None, mode='raise')[源代码]#
从数组中沿轴提取元素.
当 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]
- 参数:
- a类数组 (Ni…, M, Nk…)
源数组.
- indices类数组 (Nj…)
要提取的值的索引. 也允许将标量用于索引.
- 轴int, optional
从中选择值的轴. 默认情况下,使用展平的输入数组.
- outndarray,可选 (Ni…, Nj…, Nk…)
如果提供,结果将放置在此数组中. 它应具有适当的形状和 dtype. 请注意,如果 mode=’raise’ ,则始终会缓冲 out ; 使用其他模式可获得更好的性能.
- mode{‘raise’, ‘wrap’, ‘clip’}, optional
指定越界索引的行为方式.
‘raise’ – 引发错误(默认)
‘wrap’ – 环绕
‘clip’ – 裁剪到范围
‘clip’ 模式表示所有过大的索引都将替换为寻址该轴上最后一个元素的索引. 请注意,这会禁用使用负数进行索引.
- 返回:
- outndarray (Ni…, Nj…, Nk…)
返回的数组与 a 的类型相同.
参见
compress使用布尔掩码提取元素
ndarray.take等效方法
take_along_axis通过匹配数组和索引数组来提取元素
注释
通过消除上述描述中的内部循环,并使用
s_构建简单的切片对象,可以使用将花式索引应用于每个一维切片来表示takeNi, 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]])