나는 @
데코레이터를위한 것이지만 @=
파이썬의 것은 무엇 입니까? 미래의 아이디어를위한 예약입니까?
이것은 읽는 동안 내 많은 질문 중 하나입니다 tokenizer.py
.
나는 @
데코레이터를위한 것이지만 @=
파이썬의 것은 무엇 입니까? 미래의 아이디어를위한 예약입니까?
이것은 읽는 동안 내 많은 질문 중 하나입니다 tokenizer.py
.
답변:
에서 문서 :
@
(AT) 연산자는 행렬 곱셈을 위해 사용되도록 의도된다. 내장 파이썬 타입은이 연산자를 구현하지 않습니다.
@
연산자 파이썬 3.5에 도입 하였다. @=
예상대로 행렬 곱셈과 대입입니다. 그들은 매핑 __matmul__
, __rmatmul__
또는 __imatmul__
방법과 유사 +
과 +=
매핑 __add__
, __radd__
또는__iadd__
.
운영자와 그 근거는 PEP 465 에서 자세히 논의됩니다 .
@=
그리고 행렬 곱셈을 수행하는 @
Python 3.5에 도입 된 새로운 연산자 입니다. 그것들은 지금까지 특정 라이브러리 / 코드에 사용 된 규칙에 따라 요소 별 곱셈이나 행렬 곱셈에 사용 된 연산자와 혼동을 명확히하기 위한 것입니다. 결과적으로 앞으로 연산자 는 요소 별 곱셈에만 사용됩니다.*
*
PEP0465에 설명 된 대로 두 개의 연산자가 도입되었습니다.
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는 다음 규칙을 사용했습니다.
*
연산자 (및 연산기 일반)은 소자에 연산의 정의 하였다 ndarrays 과의 행렬 곱으로서 numpy.matrix의 유형.
방법 / 함수 dot
는 ndarrays의 행렬 곱셈에 사용되었습니다
@
연산자를 도입 하면 행렬 곱셈과 관련된 코드를 훨씬 쉽게 읽을 수 있습니다. 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)
분명히, 마지막 구현은 방정식으로 읽고 해석하기가 훨씬 쉽습니다.
@
구현 된 것으로 생각할 수 있습니다 list
.
@
와 (과) 연결 np.matmul
되지 않았습니다 np.dot
. 둘은 비슷하지만 동일하지 않습니다.
@는 Python3.5에 추가 된 Matrix Multiplication의 새로운 연산자입니다.
참조 : https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
예
C = A @ B