使用自定义类实例作为索引时,我不理解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__方法如何输出其结果显然没有关系。我尝试过:
return a, b
return (a, b)
return tuple((a, b))
他们都不为我工作。