2010-03-15 22 views
15

我很想能夠做到開箱元組/陣列/列表時作爲指標numpy的陣列

>>> A = numpy.array(((1,2),(3,4))) 
>>> idx = (0,0) 
>>> A[*idx] 

,並得到

1 

然而,這不是有效的語法。有沒有明確寫出這樣做的方法

>>> A[idx[0], idx[1]] 

編輯:謝謝你的回覆。在我的程序中,我用一個Numpy數組而不是一個元組索引並得到奇怪的結果。如Alok所示,轉換爲元組可以實現這一點。

+0

這是一個艱難的呼叫。最後,我認爲維基可以比你更擅長處理問題。仍然給你upvote :-) – ntimes 2010-03-15 22:46:31

+0

另外,我猜Vicki的答案說明我可以直接使用示例元組。 – ntimes 2010-03-15 22:47:48

回答

11

它比你想象:

>>> import numpy 
>>> A = numpy.array(((1,2),(3,4))) 
>>> idx = (0,0) 
>>> A[idx] 
1 
+3

爲什麼不'idx = [0,0]'?它似乎不工作,爲什麼? – Alcott 2013-08-30 08:45:59

+0

這是由於'tuples'和'arrays'的區別 – TRiNE 2017-05-11 08:01:46

11

嘗試

A[tuple(idx)] 

除非你有這不是因爲這個例子一樣簡單更復雜的使用情況下,上面應該爲所有數組。

+0

'idx'已經是一個元組。 – 2010-03-15 03:33:53

+1

@Mike:是的,但問題標題說它可能是一個列表或一個數組。 – 2010-03-15 03:35:34

+0

啊,我錯過了。 – 2010-03-15 03:38:03

2

索引對象調用:當你做

A.__getitem__((1, 2)) 

所以:

object.__getitem__(index) 

當你做一個[1,2],它是相當於

b = (1, 2) 

A[1, 2] == A[b] 
A[1, 2] == A[(1, 2)] 

兩個陳述都會評估爲True。

如果你碰巧指數有一個列表,它可能不是指數相同,爲[1,2]!=(1,2)

2

沒有拆包需要 - 當你有一個在[]之間的逗號,你正在創建一個元組,而不是傳遞參數。 foo[bar, baz]相當於foo[(bar, baz)]。所以,如果你有一個元組t = bar, baz,你會簡單地說foo[t]