MATLAB에서 PyTorch 및 EvoX로의 전환

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:Nend 루프를 1 기반 인덱싱과 함께 사용합니다.
  • if, elseif, else와 같은 조건문.

PyTorch

  • for i in range(N):을 0 기반 인덱싱과 함께 사용합니다.
  • 들여쓰기가 루프와 조건문의 범위 지정에 중요합니다(end 키워드 없음).

출력과 주석

MATLAB

  • 형식화된 출력에 fprintf() 함수를 사용합니다.
  • 한 줄 주석에 %를 사용합니다.

PyTorch

  • 형식화된 출력에 f-string과 함께 print를 사용합니다.
  • 한 줄 주석에 #을 사용합니다.

여러 줄 코딩

MATLAB

  • 줄 끝에 ...를 사용하여 다음 줄이 같은 줄로 취급되어야 함을 나타냅니다.

Python

  • 줄 끝에 \를 사용하여 다음 줄이 같은 줄로 취급되어야 함을 나타냅니다.
  • 여러 줄이 괄호 안에 있는 경우 특별한 후행 기호가 필요하지 않습니다.