배열을 반환하는 Python 객체의 속성이 있습니다. 이제 전체 배열을 설정할 수 있도록 해당 속성의 setter를 설정할 수 있습니다. 그러나 속성을 통해 설정할 수있는 요소를 만드는 방법을 놓치고 있습니다.NumPy 배열 속성의 요소를 설정하는 방법은 무엇입니까?
나는 (빈 SomeClass
클래스를 제공) 사용자의 관점에서 기대 :
>>> x = SomeClass()
>>> x.array = [1, 2, 3]
>>> x.array[1] = 4
>>> print (x.array)
[1, 4, 3]
, 모든 것은 여전히 위의 작동
class SomeClass(object):
def __init__(self, a):
self._a = a
@property
def array(self):
return self._a
@array.setter
def array(self, a):
self._a = a
으로
SomeClass.array
정의 속성이라고 가정합니다. 또한 나는 setter에서 NumPy 배열을 단순하게 만들었습니다.
그러나 return self._a
을 NumPy 함수 (요소를 통해 벡터화 된 방식으로 바꿉니다.)와 역함수로 self._a = a
을 바꾸면 항목이 더 이상 설정되지 않습니다.
예 :
import numpy as np
class SomeClass(object):
def __init__(self, a):
self._a = np.array(a)
@property
def array(self):
return np.sqrt(self._a)
@array.setter
def array(self, a):
self._a = np.power(a, 2)
이제 사용자가 다음과 같은 출력 본다 :
>>> x = SomeClass([1, 4, 9])
>>> print (x.array)
array([1., 2., 3.])
>>> x.array[1] = 13
>>> print (x.array) # would expect an array([1., 13., 3.]) now!
array([1., 2., 3.])
나는 문제가 어디에서 오는지 이해 생각은 (배열 NumPy와는 작동 중에 생성하는 자사의 요소를 가져옵니다 변경되었지만 저장된 배열에는 영향을주지 않습니다).
SomeClass
배열의 단일 요소를 개별적으로 쓰기 액세스 가능하게하고 따라서 설정 가능하게하려면 어떻게해야합니까? 당신의 힌트와 도움을
고마워, TheXMA
@Jaime 그의 대답 아래에 만든 점은 나에게 많은 도움이! 감사! 어레이 가변 개체이므로
좋아요, 그래서 저는 첫 번째 예제가 정확하게 작동한다고 생각한 것입니다. 사실, 두 번째 것은 제가 목표로 삼은 것입니다 ... 불행히도. 배열 종류의 데이터 구조를 클래스의 (일종의) 속성으로 만들고 요소를 변경할 수있게 만든 적이있는 사람이 있습니까? – TheXMA
[This answer] (https://stackoverflow.com/questions/16893089/how-to-implement-an) 다음과 같은 방식으로 'SomeClass.array'의 구현을 프록시로 참조하면 궁금합니다. -array-like-property-wrapper-in-python)? – TheXMA
네, 그 아이디어가 될 것입니다 ... 그 질문에 대한 대답, 즉 ndarray 인스턴스를 래핑하는 클래스에서 접근법의 문제점은 명시 적으로 랩핑하는 기능 만 수행 할 수 있다는 것입니다. 구현시,'a.arr + = 1'을 할 수 없습니다. – Jaime