我不确定如何以以下语法方式而不是复杂的解决方法来设置nd数组/矩阵。任何帮助表示赞赏。谢谢
例如:
import numpy as np
class myExample:
def __init__(self):
self._matrix = np.empty([2,2])
@property
def matrix(self, row_id=None, col_id=None):
if row_id == None or col_id == None:
return self._matrix
else:
return self._matrix[row_id, col_id]
@matrix.setter
def matrix(self, row_id, col_id, new_val):
print("{}{}".format(row_id, col_id)
self._matrix[row_id, col_id] = new_val
Test = myExample()
Test.matrix[1,2] = 3
答案 0 :(得分:1)
import numpy as np
class myExample(np.ndarray):
def __new__(cls):
zero = np.zeros((2, 4), dtype=np.int)
obj = np.asarray(zero).view(cls)
return obj
Test = myExample()
Test[1,2] = 3
print(Test)
通过这种方式,您可以免费获得吸气剂和吸气剂(__getitem__
/ __setitem__
)。
(请注意,索引[1, 2]
超出了形状[2, 2]
的范围)。
,如果您只有getter
,那么您的示例实际上可以工作;您返回已经具有所需属性的np.array
:
import numpy as np
class myExample:
def __init__(self):
self._matrix = np.empty([3, 4])
@property
def matrix(self):
return self._matrix
Test = myExample()
Test.matrix[1,2] = 3
在OP评论后更新:如果您需要在设置项目之前打印矩阵(或执行其他操作),则可以尝试以下操作:
import numpy as np
class myExample:
def __init__(self):
self._matrix = np.zeros([3, 4])
@property
def matrix(self):
return self._matrix
def __setitem__(self, key, value):
print(self._matrix) # or other things...
self._matrix[key] = value
Test = myExample()
Test[1, 3] = 5