programing

Python에서 '@=' 기호는 무엇입니까?

minecode 2023. 1. 14. 09:58
반응형

Python에서 '@=' 기호는 무엇입니까?

알고있어요@데코레이터를 위한 건데@=Python에서는요?그냥 미래 아이디어를 위한 예약인가요?

이것은 내가 책을 읽으면서 많은 질문들 중 하나일 뿐이다.tokenizer.py.

매뉴얼에서 다음 항목을 참조하십시오.

@(at) 연산자는 행렬 곱셈을 위해 사용된다.이 연산자를 구현하는 기본 제공 Python 유형이 없습니다.

@연산자는 Python 3.5에서 도입되었습니다. @=예상대로 행렬 곱셈에 이어 할당입니다.에 매핑됩니다.__matmul__,__rmatmul__또는__imatmul__하는 것과 비슷하다+그리고.+=로 매핑하다.__add__,__radd__또는__iadd__.

운영자와 그 이면에 있는 논거는 PEP 465에 자세히 설명되어 있다.

@=그리고.@행렬 곱셈을 수행하는 Python 3.5에 도입된 새로운 연산자입니다.작업자와 함께 지금까지 존재했던 혼란을 명확히 하기 위한 것입니다.*특정 라이브러리/코드에 적용된 규칙에 따라 요소별 곱셈 또는 행렬 곱셈에 사용되었습니다.그 결과, 장래에, 오퍼레이터는*는 요소별 곱셈에만 사용됩니다.

PEP0465에서 설명한 바와 같이 다음 2개의 연산자가 도입되었습니다.

  • 새 이진 연산자A @ B, 와 같이 사용됩니다.A * B
  • 임플레이스 버전A @= B, 와 같이 사용됩니다.A *= B

행렬 곱셈 대 요소 곱셈

차이를 빠르게 강조 표시하려면 두 행렬에 대해 다음과 같이 하십시오.

A = [[1, 2],    B = [[11, 12],
     [3, 4]]         [13, 14]]
  • 요소별 곱셈은 다음을 산출합니다.

    A * B = [[1 * 11,   2 * 12], 
             [3 * 13,   4 * 14]]
    
  • 행렬 곱셈은 다음을 산출합니다.

    A @ B  =  [[1 * 11 + 2 * 13,   1 * 12 + 2 * 14],
               [3 * 11 + 4 * 13,   3 * 12 + 4 * 14]]
    

사용량(Numpy)

지금까지 Numpy는 다음과 같은 규칙을 사용했습니다.

의 개요@연산자는 행렬 곱셈을 포함하는 코드를 훨씬 읽기 쉽게 만듭니다.PEP0465의 예는 다음과 같습니다.

# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
            np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))

# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)

# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

분명히 마지막 구현은 방정식으로 읽고 해석하기가 훨씬 쉽습니다.

@는 Python 3.5에 추가된 매트릭스 곱셈의 새로운 연산자입니다.

참고 자료: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465

C = A @ B

언급URL : https://stackoverflow.com/questions/27385633/what-is-the-symbol-for-in-python

반응형