Для скудной разреженной матрицы, созданной как
from scipy import sparse
M = sparse.rand(100, 100, format='csr')
Есть ли способ предотвратить его изменение после строительства? То есть запретить такую операцию, как M[0, 0] = 1
.
Моя мотивация заключается в том, что я храню M
в объекте G
, который имеет другие атрибуты, зависящие от M
. Если M
изменится, то эти атрибуты придется пересчитать или G
будет в некогерентном состоянии. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * G
, поэтому я бы скорее запретил изменение и заставил моих пользователей создавать еще один G
из их нового M
. В коде:
class G:
def __init__(self, M):
self.M = M
self.d = M.sum(axis=0)
# Normal usage.
g = G(M)
print(g.M.toarray())
print(g.d)
# Modification out of my control that leads to an incoherent state.
M[0, 0] = 1
print(g.M.toarray())
print(g.d)