[英]Numpy Advanced Indexing with 1D array
所以給定一維數組像
x = np.array([0,1,2,3,4,5,6,7,8,9])
我想同時索引多個元素。 例如代替
x[1]
x[2]
我想用
x[(1,2)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
它適用於1個2D數組,例如
x = np.array([[1,2,3,4],[5,6,7,8],[7,6,8,9]])
>>> x
array([[1, 2, 3, 4],
[5, 6, 7, 8],
[7, 6, 8, 9]])
>>> x[(1,2),(1,3)]
array([6, 9])
>>> x[(1,2),:]
array([[5, 6, 7, 8],
[7, 6, 8, 9]])
如您所見,對於nd-arrays,它工作正常! 有什么辦法為一維數組做這種索引嗎?
您需要將索引放在不是元組的列表中,numpy使用元組為多維數組建立索引:
>>> x[[1,2]]
array([1, 2])
>>> x[(1,2)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices
另一個例子 :
>>> x = np.array([6,4,0,8,77,11,2,12,67,90])
>>> x[[6,0]]
array([2, 6])
您需要將索引包裝在列表中,而不是在元組中: x[[1,2]]
。 這將觸發高級索引編制,並且NumPy返回一個新數組,其中包含您編寫的索引處的值。
只要有可能,NumPy都會隱式假定元組的每個元素索引數組的不同維度。 您的數組具有1維,而不是2維,因此x[(1,2)]
會引發錯誤。
x[(1,2), :]
,: x[(1,2), :]
成功使用2D數組的原因是,您已明確告知NumPy該數組具有(至少)二維,並從前兩個軸說出了您想要的內容。 索引被解析為2元組((1,2), :)
因此(1,2)
則用於沿第一軸的高級索引。 如果只使用x[(1,2)]
或x[1,2]
,您將在第1行第2列獲得單個元素。
對於NumPy而言,解析索引非常復雜,因為(與Python不同)可以使用幾種不同的索引編制方法。 為了使事情進一步復雜化,可以在不同的軸上使用不同的方法! 您可以在NumPy的mapping.c文件中研究確切的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.