¿Matriz numpy inmutable?


81

¿Existe una forma sencilla de crear una matriz NumPy inmutable?

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


¿Por qué necesitas la inmutabilidad?
kennytm

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

Respuestas:


122

Puede hacer que una matriz numpy no se pueda escribir:

a = np.arange(10)
a.flags.writeable = False
a[0] = 1
# Gives: ValueError: assignment destination is read-only

También vea la discusión en este hilo:

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


20
Alternativamente, a.setflags(write=False).
lafras

1
@lafrasu ¿Cuál dirías que es la forma preferida setflags()o flags.writeable=?
NPE

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

3
¿Esto también lo hace memorable?
endolito

8
¡¡IMPORTANTE!! Numpy NO tiene una matriz inmutable. Las matrices con .flags.writeable = Falsetodavía no son inmutables. Si xes una matriz, y = x[:]; x.flags.writeable = False; y[0] = 5actualiza el primer elemento de xa 5.
James Parker
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.