Как предотвратить на месте модификации скудной разреженной матрицы? - PullRequest
2 голосов
/ 05 марта 2019

Для скудной разреженной матрицы, созданной как

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...