이 클래스는 초보자가하는 질문이라고 생각합니다.하지만 클래스 메소드를 사용하는 상황이 나타날 때 사용하는 파이썬 접근법에 대해 궁금합니다. 클래스뿐만 아니라 모듈 자체 내에서 정의 된 메소드를 포함합니다. 나는 numpy를 예제로 사용할 것이다. 내가 NumPy와 정의 foo는 방법과 방법을 전화 드렸습니다 곳클래스와 모듈 메소드의 파이썬 사용
import numpy as np
foo = np.matrix([[3, 4], [9, 12]])
# Get norm (without using linalg)
norm = np.sqrt(foo.dot(foo.T)).diagonal()
나는이 같은 혼합 케이스를 사용하거나, 나는 다음과 같이 코드를 작성할 수 있습니다
norm = np.diagonal(np.sqrt(np.dot(foo, foo.T)))
내가 선호 foo.bar.baz.shoop.doop 구문을 사용하고 있지만, sqrt는 foo의 메소드가 아니기 때문에이 경우에는 할 수 없습니다. 그럼,이 같은 선을 쓰는 더 평범한 방법은 무엇입니까?
덧붙여 말하자면, 부차적 인 질문으로, 모듈에서 정의 된 메소드에 비해 일반적으로 클래스 메소드가 더 최적화 되었습니까? 나는 두포에서 무슨 일이 일어나고 있는지 잘 이해하지 못한다. 그러나 numpy는 배열이나 행렬이 될 수있는 일반적인 경우를 위해 작성된 np.dot 메서드를 가지고 있다고 가정했다. np.matrix.dot는 행렬 연산에만 다시 구현되고 최적화됩니다. 내가 틀렸다면 나를 바로 잡으세요.
아, 나는 다른 반환 유형을 알아 채지 못했습니다. 사실,이 특별한 예와 테아 노 (Theano)의 유사한 예는 제가 실행 한 유일한 예에 관한 것입니다. 이것이 일반적인 문제가 아니라는 것을 아는 것이 좋습니다. 첫 번째 예제에서와 같이 혼합 서식을 사용해야합니다. 내 괄호를 추적하지 않고 읽는 것이 조금 더 어려워 보이지만 적절한 설명을 통해이를 수정할 수 있습니다. 답변 해주셔서 감사합니다. 편집 : 투표 할 평판이 충분하지 않습니다. ( –
@Phox : 중간 변수 ('selfdot = np.dot (foo, foo.T)')를 사용하여 여러 문장을 사용하여 대괄호 문제를 해결할 수 있다는 것을 기억하십시오. norm = np.diagonal (np.sqrt (selfdot))'), 복잡한 표현을 함수로 변환 ('norm = diagnorm (foo)') 할 수 있습니다. – abarnert