使用__index__方法对numpy ndarray进行索引

时间:2019-03-15 21:36:48

标签: python arrays numpy indexing magic-methods

使用自定义类实例作为索引时,我不理解numpy ndarray的索引工作原理。

我有以下代码:

import numpy as np

class MyClass:
    def __index__(self):
        return 1,2

foo = np.array([[1,2,3],[4,5,6]])
bar = MyClass()

print(foo[1,2])
print(foo[bar])

我希望两个打印功能都能得到相同的结果(6)。但是从第二个例子开始,在第二个例子中,使用类实例和索引,我收到一个错误:

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

如果我使用显式调用__index__方法

print(foo[bar.__index__()])

有效。但这违反了魔术方法的目的。

如果我仅使用一个索引调用数组,则一切正常:

import numpy as np

class MyClass:
    def __index__(self):
        return 1

foo = np.array([[1,2,3],[4,5,6]])
bar = MyClass()

print(foo[1])
print(foo[bar])

>>> [4 5 6]
>>> [4 5 6]

所以我没有得到:

  • ndarray可以将__index__方法的输出用于多个维度。显式调用时显示。
  • ndarray确实符合__index__方法。在第二个示例中可见。
  • 但是由于某些原因,这不能同时起作用。为什么?

我错过了什么吗,还是ndarray不支持这种索引编制?


我只想补充一下,__index__方法如何输出其结果显然没有关系。我尝试过:

return a, b
return (a, b)
return tuple((a, b))

他们都不为我工作。

1 个答案:

答案 0 :(得分:1)

hereheroku local web方法__index__

所述

这就是为什么您的尝试不起作用,而“一个索引”示例起作用的原因。