我很想能夠做到開箱元組/陣列/列表時作爲指標numpy的陣列
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
,並得到
1
然而,這不是有效的語法。有沒有明確寫出這樣做的方法
>>> A[idx[0], idx[1]]
?
編輯:謝謝你的回覆。在我的程序中,我用一個Numpy數組而不是一個元組索引並得到奇怪的結果。如Alok所示,轉換爲元組可以實現這一點。
我很想能夠做到開箱元組/陣列/列表時作爲指標numpy的陣列
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
,並得到
1
然而,這不是有效的語法。有沒有明確寫出這樣做的方法
>>> A[idx[0], idx[1]]
?
編輯:謝謝你的回覆。在我的程序中,我用一個Numpy數組而不是一個元組索引並得到奇怪的結果。如Alok所示,轉換爲元組可以實現這一點。
嘗試
A[tuple(idx)]
除非你有這不是因爲這個例子一樣簡單更復雜的使用情況下,上面應該爲所有數組。
'idx'已經是一個元組。 – 2010-03-15 03:33:53
@Mike:是的,但問題標題說它可能是一個列表或一個數組。 – 2010-03-15 03:35:34
啊,我錯過了。 – 2010-03-15 03:38:03
索引對象調用:當你做
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)
沒有拆包需要 - 當你有一個在[
和]
之間的逗號,你正在創建一個元組,而不是傳遞參數。 foo[bar, baz]
相當於foo[(bar, baz)]
。所以,如果你有一個元組t = bar, baz
,你會簡單地說foo[t]
。
這是一個艱難的呼叫。最後,我認爲維基可以比你更擅長處理問題。仍然給你upvote :-) – ntimes 2010-03-15 22:46:31
另外,我猜Vicki的答案說明我可以直接使用示例元組。 – ntimes 2010-03-15 22:47:48