将元组/数组/列表解包为Numpy数组的索引

31 投票
4 回答
15916 浏览
提问于 2025-04-15 20:26

我希望能够做到

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

然后得到

1

但是这样写是不符合语法规则的。有办法做到这一点,而不需要明确写出

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

吗?

补充说明:谢谢大家的回复。在我的程序中,我用的是Numpy数组来索引,而不是元组,所以得到了奇怪的结果。按照Alok的建议,把它转换成元组就解决了这个问题。

4 个回答

6

不需要拆包——当你在 [] 之间有一个逗号时,你实际上是在创建一个元组,而不是在传递参数。foo[bar, baz]foo[(bar, baz)] 是一样的。所以如果你有一个元组 t = bar, baz,你只需要写 foo[t]

22

试试这个

A[tuple(idx)]

除非你有更复杂的情况,不像这个例子那么简单,否则上面的代码应该适用于所有数组。

26

其实比你想的要简单:

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

撰写回答