2011-04-04 25 views
46

C'è un modo semplice per creare un array NumPy immutabile?Serie numpy immutabile?

Se si deve ricavare una classe da ndarray per eseguire questa operazione, qual è l'insieme minimo di metodi che è necessario sovrascrivere per ottenere l'immutabilità?

+0

Perché hai bisogno di immutabilità? – kennytm

+19

@KennyTM Per evitare errori di codifica causati dalla modifica accidentale di qualcosa che si presume invariabile. – NPE

risposta

70

È possibile effettuare una NumPy matrice non scrivibile:

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

veda anche la discussione in questa discussione:

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

e la documentazione:

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

+13

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

+0

@lafrasu Quale diresti è la forma preferita, 'setflags()' o 'flags.writeable ='? – NPE

+2

@aix: una rapida occhiata alla documentazione sembrerebbe che i due approcci siano identici. Personalmente, preferisco usare un metodo per impostare gli attributi. – lafras