【问题标题】:Unpacking tuples/arrays/lists as indices for Numpy Arrays将元组/数组/列表解包为 Numpy 数组的索引
【发布时间】:2010-03-15 03:26:57
【问题描述】:

我希望能够做到

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

得到

1

但是这不是有效的语法。有没有办法在不明确写出的情况下做到这一点

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

?

编辑:感谢您的回复。在我的程序中,我使用 Numpy 数组而不是元组进行索引并得到奇怪的结果。按照 Alok 的建议转换为元组就可以了。

【问题讨论】:

  • 这是一个艰难的决定。最后,我认为 Vicki 可以比你做更多的积分。不过还是给了你一个赞成票:-)
  • 另外,我猜 Vicki 的回答说明我可以直接使用示例元组。

标签: python numpy


【解决方案1】:

这比你想象的要容易:

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

【讨论】:

  • tuplesarrays的区别
【解决方案2】:

试试

A[tuple(idx)]

除非您有一个不像这个例子那么简单的更复杂的用例,否则上述方法应该适用于所有数组。

【讨论】:

  • @Mike:是的,但问题标题说它可能是一个列表或数组。
  • 也适用于 Pytorch。
【解决方案3】:

不需要解包——当[] 之间有一个逗号时,你是在创建一个元组,而不是传递参数。 foo[bar, baz] 等价于 foo[(bar, baz)]。因此,如果您有一个元组 t = bar, baz,您只需说 foo[t]

【讨论】:

    【解决方案4】:

    索引对象调用:

    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)

    的索引不同

    【讨论】:

      猜你喜欢
      • 2015-04-14
      • 1970-01-01
      • 2022-01-02
      • 2021-08-28
      • 2018-05-29
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多