Незмінний масив numpy?


81

Чи є простий спосіб створити незмінний масив NumPy?

Якщо для цього потрібно вивести клас ndarray, який мінімальний набір методів потрібно замінити, щоб досягти незмінності?


Навіщо потрібна незмінність?
kennytm

37
@KennyTM Щоб уникнути помилок кодування, спричинених випадковою модифікацією чогось, що вважається інваріантним.
NPE

Відповіді:


122

Ви можете зробити масив numpy неможливим для запису:

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

Також дивіться обговорення в цій темі:

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

та документація:

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


20
Як альтернативи a.setflags(write=False).
lafras

1
@lafrasu Який би, на ваш погляд, найкраща форма, setflags()чи flags.writeable=?
NPE

4
@aix: Швидкий огляд документації дасть змогу здатися, ніби два підходи однакові. Особисто я віддаю перевагу використанню методу для встановлення атрибутів.
лафрас

3
Це також робить його незабутнім?
ендоліти

8
ВАЖЛИВО !! Numpy НЕ має незмінного масиву. Масиви з .flags.writeable = Falseяк і раніше не є незмінними. Якщо xє масивом, y = x[:]; x.flags.writeable = False; y[0] = 5оновлює перший елемент xдо 5.
Джеймс Паркер,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.