NumPy参考 >例行程序 >Indexing routines > numpy.take
numpy.
take
(a,索引,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]
源数组。
要提取的值的索引。
1.8.0版中的新功能。
还允许标量用于索引。
选择值的轴。默认情况下,使用扁平化的输入数组。
如果提供,结果将放置在此数组中。它应该具有适当的形状和dtype。注意,如果mode ='raise',则out总是被缓冲;使用其他模式以获得更好的性能。
指定越界索引的行为。
'raise'–引发错误(默认)
“环绕” –环绕
'clip'–剪切到范围
“剪辑”模式意味着所有太大的索引都将替换为该轴上最后一个元素的索引。请注意,这将禁用负数索引。
返回的数组具有相同的类型一个。
也可以看看
compress
使用布尔蒙版获取元素
ndarray.take
等效方法
take_along_axis
通过匹配数组和索引数组获取元素
笔记
通过消除上面描述中的内部循环,并s_
用于构建简单的切片对象,take
可以通过对每个1维切片应用花式索引来表示:
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,则可以使用“花式”索引。
>>> a = np.array(a)
>>> a[indices]
array([4, 3, 6])
如果indices
不是一维,则输出也具有这些尺寸。
>>> np.take(a, [[0, 1], [2, 3]])
array([[4, 3],
[5, 7]])