2016-10-19 2 views
0

pythonnumpy 모듈에 대한 간단한 질문이 있습니다.numpy 행렬의 내용을 다른 행렬에 복사하는 방법은 무엇입니까?

def update_x_last(self, x): 
    self.x_last = x 

클래스 속성 x_last 및 기능 인자 x는 두 종류 numpy.matrix의로 같은 모양의 초기화 : 나는 다음과 같은 기능을 가지고있다. (x.shape = x_last.shape = (4,1)

나는 위의 코드를 xx_last에 인수의 콘텐츠를 복사하지 않는다는 것을 눈치 챘지만 x의 주소로 객체 x_last 점을합니다.

그러나 제가하고 싶은 것은 다음

  • self.x_last

가장 좋은 방법은 무엇에 x의 내용 만 self.x_last

  • 복사의 주소를 변경하지 마십시오 이것을하기 위해?

    편집 : ''self.x_last '의 주소를 변경하지 마십시오. 나를 위해 중요하지 않습니다. 유일한 필수 동작은 콘텐츠 만 복사하는 두 번째 요구 사항입니다. 모양이 같은 경우

  • +1

    그렇지 않은 이유는 있습니까? 'self.x_last'의 주소를 변경하고 싶습니까? – MooingRawr

    +0

    @MooingRawr : 예, 특정 조건에서 업데이트 기능을 호출합니다. 하자 매 2 초, 0,2,4 ...하지만 시간이 매 1 초, 0,1,2를 통과 .... 나는 단지 2 초마다 x_last를 업데이 트하고 싶지만, 나는 이상한 초, 함수가 호출되지 않더라도. P.S : 인수 x는 모든 함수 호출시 생성되는 행렬이 아닌 다른 곳에 저장된 다른 객체입니다. – OnurA

    +0

    @ 오누라 : 그 질문에 대한 답변이 어떻게 표시되는지 모르겠습니다. 다르게 표현해 봅시다. 'id (x_last)'가 매번 변경되면 왜 작동하지 않겠습니까? – Eric

    답변

    2

    , 이들의 당신의 요구 사항을 모두 충족 :

    self.x_last[...] = x 
    # or self.x_last[()] = x 
    # or self.x_last[:] = x 
    

    내가 첫 번째는 아마도 가장 명확하다고 주장 것


    신속하게 요구 사항을 살펴 보겠습니다.

    x의 내용 만 self.x_last에 복사하십시오.

    합리적인 것 같습니다. 이 x 변경 지속될 경우, 다음 x_last 당신에게 아무것도 구입하지 않습니다 self.x_last

    이의 주소를 변경하지 마십시오

    으로 변경되지 않습니다 것을 의미합니다. 다른 스레드에서 x_last을 사용하는 함수가 예기치 않게 변경되거나 더 나쁜 것으로 여전히 불완전하게 복사 될 때 데이터와 함께 작동 할 수 있기 때문에 이것은 더욱 악화됩니다. x

    +0

    [...]과 [:]의 차이점은 무엇입니까? – OnurA

    +0

    '...'는 배열 차원 "_과 (과) 일치시키기 위해 필요한만큼"많은 수의 :'를 의미합니다. 'x'가 0 차원 일 때만 차이가 있습니다 :'x = np.array (1); x [:]'는 오류이지만'x = np.array (1); x [...]'는 아닙니다. – Eric

    3
    import numpy as np 
    
    self.x_last = np.copy(x) 
    
    +1

    이것은 "self.x_last의 주소를 변경하지 마십시오"_라는 질문이 – Eric

    관련 문제