2011-04-04 3 views
46

Existe-t-il un moyen simple de créer une matrice NumPy immuable?Tableau nummp immuable?

Si l'on doit dériver une classe de ndarray pour ce faire, ce qui est l'ensemble minimal de méthodes que l'on doit passer outre pour atteindre immuabilité?

+0

Pourquoi faire vous avez besoin de l'immutabilité? – kennytm

+19

@KennyTM Pour éviter les erreurs de codage causées par une modification accidentelle d'un élément présumé invariant. – NPE

Répondre

70

Vous pouvez faire un tableau numpy unwriteable:

a = np.arange(10) 
a.flags.writeable = False 
a[0] = 1 
# Gives: RuntimeError: array is not writeable 

Voir aussi la discussion sur ce sujet:

http://mail.scipy.org/pipermail/numpy-discussion/2008-December/039274.html

et la documentation:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.flags.html

+13

Alternativement, 'a.setflags (write = False)'. – lafras

+0

@lafrasu Selon vous, quelle est la forme préférée, 'setflags()' ou 'flags.writeable ='? – NPE

+2

@aix: Un rapide coup d'œil à la documentation donnerait l'impression que les deux approches sont identiques. Personnellement, je préfère utiliser une méthode pour définir des attributs. – lafras