Row-major vs Column-major: 배열 저장 순서 완벽 정리!

Bean·2025년 6월 17일
0

알고리즘

목록 보기
8/9

다차원 배열을 다룰 때 row-majorcolumn-major는 필수 개념입니다.
이 차이는 단순한 순서 문제가 아니라 내부 저장 방식, 성능 최적화, 그리고 언어/라이브러리 간 호환성에 큰 영향을 미칩니다.


1. 정의

개념설명
Row-major행 우선 저장: 한 행의 데이터가 메모리에 연속 저장
Column-major열 우선 저장: 한 열의 데이터가 메모리에 연속 저장

2. 예시 (2×3 배열)

아래 2×3 배열을 예로 들어보겠습니다.

A = [[1, 2, 3],
     [4, 5, 6]]

2.1. Row-major

  • 메모리 저장 순서: [1, 2, 3, 4, 5, 6]
  • 주소 순서:
    A[0][0], A[0][1], A[0][2], A[1][0], A[1][1], A[1][2]

사용 예: C/C++, PyTorch, NumPy(기본)


2.2. Column-major

  • 메모리 저장 순서: [1, 4, 2, 5, 3, 6]
  • 주소 순서:
    A[0][0], A[1][0], A[0][1], A[1][1], A[0][2], A[1][2]

사용 예: Fortran, MATLAB, VTK, Eigen


3. 주요 언어/라이브러리 차이

언어/라이브러리저장 방식
C/C++, PyTorch, NumPy (기본)Row-major
Fortran, MATLAB, VTK, Eigen (기본)Column-major
NumPy (order='F')Column-major 전환 가능
PyTorch (.permute(...))수동 제어 가능

4. 성능과 호환성

  • 캐시 적중률에 따라 반복문의 효율성이 달라집니다.

  • VTK, Eigen 등 column-major 기반 라이브러리와 데이터를 주고받을 때는 저장 순서 변환이 필요합니다.

    • 예: PyTorch → VTK 변환 시 transpose, reshape, order='F' 활용 필수!

5. 인덱스 계산 공식

5.1. Row-major:

int index = row * num_cols + col;

5.2. Column-major:

int index = col * num_rows + row;

6. 요약

항목Row-majorColumn-major
저장 우선 순서행 우선열 우선
메모리 순서A[0][0], A[0][1], A[1][0], ...A[0][0], A[1][0], A[0][1], ...
사용 예C/C++, PyTorchFortran, VTK, Eigen
성능 최적화반복문 순서와 일치해야 효율적동일
profile
AI developer

0개의 댓글