自定义 Class - 更改数组中的属性
Custom Class - Change attribute in array
我相信我正在寻找一个运算符来更改 Python 的数组。我为 numpy 数组矩阵创建了自定义 class。
我想更改数组中的单个元素,这也会更改零的数量,这就是下面的 class 所做的。
class MyClass(object):
def __init__(self, Matrix):
self._nonzero=len(Matrix[nonzero(Matrix)])
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
def get_Matrix(self):
return self._Matrix
def get_nonzero(self):
return self._nonzero
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_Matrix)
如果我有以下输入,我会得到以下结果
a= array([[1, 2],
[3, 4]])
g=MyClass(a)
g.nonzero
>>>4 #Correct
g.Matrix=array([[0, 2],
[3, 4]])
g.nonzero
>>>3 #Correct
但我想以更简单的方式更改 numpy 数组矩阵中的单个元素。当我尝试以下操作时,我弄错了:
g.Matrix[0,0]=0
g.Matrix
>>>array([[0, 2],
[3, 4]])
g.nonzero
>>>4 #incorrect
编辑
我相信我用这段代码解决了它。我不确定它是否经过优化,但它确实有效。
class MyClass(object):
def __init__(self, Matrix):
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
def get_Matrix(self):
return self._Matrix
def set_nonzero(self,Matrix):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
def get_nonzero(self):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
return self._nonzero
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_nonzero)
您遇到的问题是非零值仅在您的对象首次实例化时计算。最好的选择是使非零评估而不是 return 存储的值。
class MyClass(object):
def __init__(self, Matrix):
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
def get_Matrix(self):
return self._Matrix
def get_nonzero(self):
return len(_Matrix[nonzero(_Matrix)])
或者,如果您想要非零缓存,您可以对 class 的用户隐藏矩阵并重载索引运算符以获取它,例如
class MyClass(object):
def __init__(self, Matrix):
self.__Matrix=Matrix
self._nonzero=len(__Matrix[nonzero(__Matrix)])
def get_nonzero(self):
return len(__Matrix[nonzero(Matrix)])
def __getitem__(self,index):
return self.__Matrix[index]
def __setitem__(self, index, value)
self.__Matrix[index] = value
self._nonzero = len(__Matrix[nonzero(__Matrix)])
def get_nonzero(self):
return self._nonzero
其中一个包括:
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_nonzero)
我相信我正在寻找一个运算符来更改 Python 的数组。我为 numpy 数组矩阵创建了自定义 class。
我想更改数组中的单个元素,这也会更改零的数量,这就是下面的 class 所做的。
class MyClass(object):
def __init__(self, Matrix):
self._nonzero=len(Matrix[nonzero(Matrix)])
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
def get_Matrix(self):
return self._Matrix
def get_nonzero(self):
return self._nonzero
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_Matrix)
如果我有以下输入,我会得到以下结果
a= array([[1, 2],
[3, 4]])
g=MyClass(a)
g.nonzero
>>>4 #Correct
g.Matrix=array([[0, 2],
[3, 4]])
g.nonzero
>>>3 #Correct
但我想以更简单的方式更改 numpy 数组矩阵中的单个元素。当我尝试以下操作时,我弄错了:
g.Matrix[0,0]=0
g.Matrix
>>>array([[0, 2],
[3, 4]])
g.nonzero
>>>4 #incorrect
编辑
我相信我用这段代码解决了它。我不确定它是否经过优化,但它确实有效。
class MyClass(object):
def __init__(self, Matrix):
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
def get_Matrix(self):
return self._Matrix
def set_nonzero(self,Matrix):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
def get_nonzero(self):
self._Matrix=Matrix
self._nonzero=len(Matrix[nonzero(Matrix)])
return self._nonzero
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_nonzero)
您遇到的问题是非零值仅在您的对象首次实例化时计算。最好的选择是使非零评估而不是 return 存储的值。
class MyClass(object):
def __init__(self, Matrix):
self._Matrix=Matrix
def set_Matrix(self,Matrix):
self._Matrix=Matrix
def get_Matrix(self):
return self._Matrix
def get_nonzero(self):
return len(_Matrix[nonzero(_Matrix)])
或者,如果您想要非零缓存,您可以对 class 的用户隐藏矩阵并重载索引运算符以获取它,例如
class MyClass(object):
def __init__(self, Matrix):
self.__Matrix=Matrix
self._nonzero=len(__Matrix[nonzero(__Matrix)])
def get_nonzero(self):
return len(__Matrix[nonzero(Matrix)])
def __getitem__(self,index):
return self.__Matrix[index]
def __setitem__(self, index, value)
self.__Matrix[index] = value
self._nonzero = len(__Matrix[nonzero(__Matrix)])
def get_nonzero(self):
return self._nonzero
其中一个包括:
Matrix=property(fget=get_Matrix,fset=set_Matrix)
nonzero =property(fget=get_nonzero,fset=set_nonzero)