불변의 numpy 배열?


81

변경 불가능한 NumPy 배열을 만드는 간단한 방법이 있습니까?

ndarray이 작업을 수행하기 위해 클래스를 파생 해야하는 경우 불변성을 달성하기 위해 재정의해야하는 최소 메서드 집합은 무엇입니까?


불변성이 필요한 이유는 무엇입니까?
kennytm 2011

38
@KennyTM 불변으로 간주되는 것을 실수로 수정하여 발생하는 코딩 오류를 방지합니다.
NPE 2011

답변:


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 2011

1
@lafrasu 어느 당신이 선호하는 형태이다 말 것 setflags()flags.writeable=?
NPE

4
@aix : 문서를 빠르게 살펴보면 두 접근 방식이 동일한 것처럼 보일 것입니다. 개인적으로 속성을 설정하는 방법을 선호합니다.
lafras 2011

3
이것은 또한 그것을 기억할 수있게하나요?
endolith

8
중대한!! Numpy에는 변경 불가능한 배열이 없습니다. 가있는 배열 .flags.writeable = False은 여전히 ​​변경할 수 없습니다. 경우 x배열이고, y = x[:]; x.flags.writeable = False; y[0] = 5의 첫 번째 요소 업데이트 x행을 5.
James Parker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.