[Python] matmul, @ 연산

김명섭·2024년 4월 12일

[Python]

목록 보기
6/11

NumPy에서 @ 연산자를 사용하면 matmul 매직 메소드가 호출되어 행렬 곱셈(matrix multiplication)을 수행합니다. 이는 Python 3.5 이상에서 도입된 기능입니다.

rmatmul 매직 메소드는 matmul의 반대 버전으로, 역순으로 행렬 곱셈을 수행합니다. 즉, a @ b와 같은 연산에서 a가 matmul 메소드를 구현하지 않았지만 b가 rmatmul 메소드를 구현한 경우, b.rmatmul(a)가 호출됩니다.

rmatmul은 @ 연산자와 함께 동작하며, 다음과 같은 규칙으로 적용됩니다:

a @ b와 같은 연산에서, 먼저 a.matmul(b)를 호출합니다.
a.matmul(b)가 구현되어 있지 않거나 NotImplemented를 반환하면, b.rmatmul(a)를 호출합니다.
b.rmatmul(a)도 구현되어 있지 않거나 NotImplemented를 반환하면, TypeError 예외가 발생합니다.
이렇게 rmatmul은 @ 연산자의 오른쪽 피연산자에 대해 역순으로 행렬 곱셈을 수행할 수 있게 해줍니다. 이는 사용자 정의 클래스에서 행렬 곱셈을 구현할 때 유용하게 사용될 수 있습니다.



a @ b와 같은 연산에서 Python 인터프리터는 다음 순서로 메소드를 찾습니다:

a.matmul(b)
b.rmatmul(a)
matmulrmatmul의 차이점은 연산자의 좌우 피연산자의 위치 차이입니다.

matmul은 a @ b에서 a에 대해 호출됩니다.
rmatmul은 a @ b에서 b에 대해 호출됩니다.
이 순서는 다른 이항 연산자에 대한 매직 메소드에서도 동일하게 적용됩니다. 예를 들어, + 연산자에 대해서는 addradd, - 연산자에 대해서는 subrsub 등이 있습니다.

이러한 매직 메소드들은 연산자 오버로딩(operator overloading)을 가능하게 하여, 사용자 정의 클래스에서 연산자의 동작을 커스터마이즈할 수 있게 해줍니다.

profile
ML Engineer

0개의 댓글