为了简化起见,我在numpy数组周围构建了一个包装器,我将只显示显示错误的必要部分:
class Matrix(object):
"""wrap around numpy array
"""
def __init__(self, shape, fill_value):
self.matrix = np.full(shape, fill_value)
def __getitem__(self, a, b):
return self.matrix[a, b]
m = Matrix((10, 10), 5)
print(m[5, 5])
print语句生成以下错误:
KeyError: __getitem__() takes exactly 3 arguments (2 given)
使用[]运算符访问m的修复方法如下:
m[1, 1]
答案 0 :(得分:1)
目前,您有一个类Matrix
,其属性matrix
是一个numpy数组。因此,您需要先引用该属性,然后传递索引:
>>> m.matrix[5,5]
5
此时,你有不缠绕numpy数组。根据您的想法,这可能是朝着正确方向迈出的一步:
class Matrix(np.ndarray):
def __new__(cls, shape, fill_value=0):
return np.full(shape, fill_value)
>>> m = MyMatrix((10, 10), 5)
>>> print(m[5, 5])
>>> 5
然而,这基本上只是m = np.full(shape, fill_value)
。我想你想要将自定义属性和方法添加到numpy数组中,你应该在numpy文档中查看this example。
答案 1 :(得分:0)
解决方案是将变量传递给变量,如下所示:
class Matrix(object):
"""wrap around numpy array
"""
def __init__(self, shape, fill_value):
self.matrix = np.full(shape, fill_value)
def __getitem__(self, a):
# we could do also do return self.matrix[a[0], a[1]]
return self.matrix[a]
m = Matrix((10, 10), 5)
print(m[5, 5])