2015-01-12 1 views
1

NumPy n 차원 배열을 상속 한 간단한 클래스가 있습니다. 클래스의 인스턴스의 배열 값을 변경할 수있는 클래스의 두 가지 메서드가 필요합니다. 메소드 중 하나는 클래스 인스턴스의 배열을 클래스 인스턴스의 목록 데이터 속성 값으로 설정하고 다른 메소드는 클래스 인스턴스의 배열에 일부 목록 값을 추가해야합니다. 이 클래스는 다음과 같은?NumPy 배열을 상속 한 클래스는 어떻게 고유 한 값을 변경할 수 있습니까?

>>> v1 = np.array([23, 20, 13, 24, 25, 28, 26, 17, 18, 29]) 
>>> v1 = v1[v1 >= 20] 
같은 표준 NumPy와 배열 작업을 살아남을 것입니다, 빠른, 선제 적 질문으로

import numpy 

class Variable(numpy.ndarray): 

    def __new__(cls, name = "zappo"): 
     self = numpy.asarray([]).view(cls) 
     self._values   = [1, 2, 3] # list of values 
     return(self) 

    def updateNumPyArrayWithValues(self): 
     self = numpy.asarray(self._values) 

    def appendToNumPyArray(self): 
     self = numpy.append(self, [4, 5, 6]) 

a = Variable() 
print(a) 
a.updateNumPyArrayWithValues() 
print(a) 

: 나는이 작업을 수행하는 방법을 잘 모르겠지만, 다음과 같이 내 시도이다

내 수업과 비슷한 일을하고 모든 데이터 속성을 유지할 수 있습니까?

+0

는 '자기 = something' 가능성이 당신이 그것을 반환하는 __new__''를 제외하고, 파이썬에서 많은 작업을 수행하지 않습니다 쓰기. 다른 방법에서는 self의 * content *를 변경하려고합니다. 'self [:] = somevalues'라고 쓰면됩니다. – user4815162342

답변

1

당신은 이런 식으로 작업을 수행 할 수 있습니다

class Variable(np.ndarray): 

    def __new__(cls, a): 
     obj = np.asarray(a).view(cls) 
     return obj 

    def updateNumPyArrayWithValues(self): 
     self[1] = 1 
     return self 

>>> v = Variable([1,2,3]) 
>>> v 
Variable([1, 2, 3]) 
>>> v.updateNumPyArrayWithValues() 
Variable([1, 1, 3]) 
>>> v[v>1] 
Variable([3]) 
+1

downvote는 괜찮지 만 그 이유를 설명 할 수 있습니까? 이 코드는 테스트를 거쳐 OP가 원하는 것을 수행합니다. – elyase

+0

대단히 감사합니다. 내 코드처럼 NumPy 배열의 내용을 정의하지 않고 * 클래스 인스턴스를 만들 수 있습니까? 그런 다음 임의의 크기의 데이터 속성 목록으로 업데이트 할 수 있습니까? 실제로, 내가 할 일은 값 목록을로드 한 다음 자체 NumPy 배열에 저장하는 인스턴스의 메서드를 사용하는 것입니다. – d3pd

관련 문제