簡體   English   中英

一維數組的Numpy Advanced Indexing

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM