我很想能够做到这件事
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
并获取
1
然而,这不是有效的语法。是否有一种方法可以在不显式编写的情况下完成这个任务?
>>> A[idx[0], idx[1]]
编辑:感谢回答。在我的程序中,我使用了一个Numpy数组进行索引,而不是元组,导致出现奇怪的结果。按照Alok的建议转换为元组就解决了问题。
我很想能够做到这件事
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[*idx]
并获取
1
然而,这不是有效的语法。是否有一种方法可以在不显式编写的情况下完成这个任务?
>>> A[idx[0], idx[1]]
编辑:感谢回答。在我的程序中,我使用了一个Numpy数组进行索引,而不是元组,导致出现奇怪的结果。按照Alok的建议转换为元组就解决了问题。
比你想象的更容易:
>>> import numpy
>>> A = numpy.array(((1,2),(3,4)))
>>> idx = (0,0)
>>> A[idx]
1
尝试
A[tuple(idx)]
除非你有一个比这个例子更复杂的用例,否则上述方法适用于所有数组。
无需拆包——当在[
和]
之间有一个逗号时,你正在创建一个元组,而不是传递参数。 foo[bar, baz]
等同于 foo[(bar, baz)]
。因此,如果你有一个元组 t = bar, baz
,你只需要说 foo[t]
。
对一个对象进行索引调用:
object.__getitem__(index)
当您执行A [1, 2]时,它相当于:
A.__getitem__((1, 2))
因此,当您执行以下操作时:
b = (1, 2)
A[1, 2] == A[b]
A[1, 2] == A[(1, 2)]
这两个语句都将评估为True。
如果您使用列表进行索引,它可能不会索引相同,因为[1, 2]!=(1, 2)