2011-04-04 23 views
46

¿Existe alguna manera simple de crear una matriz NumPy inmutable?matriz numpy inmutable?

Si tiene que derivar una clase de ndarray para hacer esto, ¿cuál es el conjunto mínimo de métodos que uno tiene que anular para lograr la inmutabilidad?

+0

¿Por qué necesitas inmutabilidad? – kennytm

+19

@KennyTM Para evitar errores de codificación causados ​​por la modificación accidental de algo que se supone invariante. – NPE

Respuesta

70

Usted puede hacer una matriz numpy unwriteable:

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

Véase también la discusión en este tema:

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

y la documentación:

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

+13

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

+0

@lafrasu ¿Cuál diría que es la forma preferida, 'setflags()' o 'flags.writeable ='? – NPE

+2

@aix: un vistazo rápido a la documentación parecería que los dos enfoques son idénticos. Personalmente, prefiero usar un método para establecer atributos. – lafras

Cuestiones relacionadas