MATLAB에서 PyTorch 및 EvoX로의 전환
이 문서는 MATLAB 사용자가 진화 연산을 위해 PyTorch와 EvoX로 전환하는 것을 안내하는 것을 목표로 합니다. 구문, 데이터 구조 및 워크플로우 측면에서 MATLAB과 PyTorch 간의 핵심 차이점을 강조합니다. 그런 다음 MATLAB과 PyTorch 모두에서 입자 군집 최적화(PSO) 예제를 사용하여 이러한 차이점을 설명합니다.
구문 차이
배열 생성 및 인덱싱
MATLAB
- 1 기반 인덱싱을 사용합니다.
- 벡터와 행렬은 대괄호와 세미콜론을 사용하여 선언합니다(예:
[1 2 3; 4 5 6]).rand()를 사용한 랜덤 초기화는 $[0, 1)$ 구간의 값을 반환합니다. - 슬라이싱은
(start:end)구문을 사용하며 1 기반 인덱싱을 활용합니다.
PyTorch
- 0 기반 인덱싱을 사용합니다.
- 배열(텐서)은 일반적으로
torch.rand(),torch.zeros()같은 생성자를 사용하거나 Python 리스트를torch.tensor()로 변환하여 생성합니다. - 슬라이싱은 0 기반 인덱스와 함께
[start:end]를 사용합니다.
행렬 계산
MATLAB
*로 선형 대수 행렬 곱셈을 수행합니다..*를 사용하여 같은 크기의 행렬의 대응하는 요소를 곱합니다./는 행렬 우측 나눗셈을 나타냅니다..^는 요소별 거듭제곱을 나타냅니다.- 길이가 1인 텐서의 후행 및 선행 차원은 무시됩니다.
- 요소별 연산을 위해 브로드캐스트 가능한 차원을 자동으로 찾고 암시적 차원 확장을 수행합니다.
PyTorch
@또는torch.matmul()로 선형 대수 행렬 곱셈을 수행합니다.*를 직접 사용하여 같은 형태 또는 브로드캐스트 가능한 형태의 텐서의 대응하는 요소를 곱합니다./는 요소별 나눗셈을 나타냅니다.**는 요소별 거듭제곱을 나타냅니다.- 길이가 1인 텐서의 차원은 보존되며 브로드캐스트 차원으로 취급됩니다.
- 대부분의 암시적 차원 확장을 방지하며, 브로드캐스트 차원이 일반적으로 필요합니다.
함수와 정의
MATLAB
function키워드로 함수를 정의합니다.- 파일에 여러 함수를 포함할 수 있지만, 일반적으로 주 함수는 파일 이름을 공유합니다.
- 익명 함수(예:
@(x) sum(x.^2))는 짧은 인라인 계산에 사용됩니다.
PyTorch
def키워드를 사용하여 함수를 정의하며, 일반적으로 단일.py파일 또는 모듈 내에서 정의합니다.- 클래스는 객체 지향 방식으로 데이터와 메서드를 캡슐화하는 데 사용됩니다.
- 람다는 짧은 익명 함수(
lambda x: x.sum())로 사용되지만, 여러 줄 람다는 허용되지 않습니다.
제어 흐름
MATLAB
for i = 1:N…end루프를 1 기반 인덱싱과 함께 사용합니다.if,elseif,else와 같은 조건문.
PyTorch
for i in range(N):을 0 기반 인덱싱과 함께 사용합니다.- 들여쓰기가 루프와 조건문의 범위 지정에 중요합니다(
end키워드 없음).
출력과 주석
MATLAB
- 형식화된 출력에
fprintf()함수를 사용합니다. - 한 줄 주석에
%를 사용합니다.
PyTorch
- 형식화된 출력에 f-string과 함께
print를 사용합니다. - 한 줄 주석에
#을 사용합니다.
여러 줄 코딩
MATLAB
- 줄 끝에
...를 사용하여 다음 줄이 같은 줄로 취급되어야 함을 나타냅니다.
Python
- 줄 끝에
\를 사용하여 다음 줄이 같은 줄로 취급되어야 함을 나타냅니다. - 여러 줄이 괄호 안에 있는 경우 특별한 후행 기호가 필요하지 않습니다.