본문 바로가기
프로그래밍/C&C++

[C++] 행렬 곱셈을 이해하고 구현하기

by wyatti 2023. 6. 17.

C++에서 행렬 곱셈을 어떻게 구현하는지, 그리고 그것이 왜 중요한지에 대해 알아보는 가이드입니다. C++와 데이터 연산에 관심 있는 분들에게 유용합니다.
C++로 행렬 곱셈 이해하고 구현하기

C++ 프로그래밍에서 행렬 곱셈은 컴퓨터 그래픽스, 물리 계산, 인공지능 등 다양한 분야에서 중요한 역할을 수행합니다. 이번 글에서는 C++를 사용하여 행렬 곱셈을 어떻게 구현하는지, 그리고 그것이 왜 중요한지에 대해 알아보겠습니다.

 

 

행렬 곱셈의 기본 이해

행렬 곱셈은 두 행렬의 행과 열을 각각 곱하고, 그 결과를 모두 더하는 연산입니다. 그러나 이 연산을 수행하려면 두 행렬의 '형태'가 서로 맞아야 합니다. 즉, 첫 번째 행렬의 열의 수와 두 번째 행렬의 행의 수가 같아야 합니다.

 

 

 

C++에서의 행렬 곱셈 구현

C++에서 행렬 곱셈을 구현하려면 일반적으로 2차원 배열 또는 벡터를 사용합니다. 그런 다음 중첩된 for 루프를 사용하여 각 요소를 곱하고 더합니다.

 

예제 1: 2x2 행렬 곱셈

다음 코드는 두 개의 2x2 행렬을 곱하는 방법을 보여줍니다

#include<iostream>
using namespace std;

int main(){
    int A[2][2] = { {1, 2}, {3, 4} };
    int B[2][2] = { {5, 6}, {7, 8} };
    int C[2][2] = {0};

    // 행렬 곱셈 연산
    for(int i=0;i<2;++i){
        for(int j=0;j<2;++j){
            for(int k=0;k<2;++k){
                C[i][j] += A[i][k] * B[k][j]; //행렬 A의 행 i와 행렬 B의 열 j를 곱하여 더함
            }
        }
    }

    // 결과 출력
    for(int i=0;i<2;++i){
        for(int j=0;j<2;++j){
            cout<<C[i][j]<<" ";
        }
        cout<<"\n";
    }
}

 

 

예제 2: 3x3 행렬 곱셈

다음은 두 개의 3x3 행렬을 곱하는 코드입니다.

#include<iostream>
using namespace std;

int main(){
    int A[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    int B[3][3] = { {10, 11, 12}, {13, 14, 15}, {16, 17, 18} };
    int C[3][3] = {0};

    // 행렬 곱셈 연산
    for(int i=0;i<3;++i){
        for(int j=0;j<3;++j){
            for(int k=0;k<3;++k){
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // 결과 출력
    for(int i=0;i<3;++i){
        for(int j=0;j<3;++j){
            cout<<C[i][j]<<" ";
        }
        cout<<"\n";
    }
}

 

 

예제 3: 벡터를 사용한 행렬 곱셈

C++의 STL 라이브러리를 활용하면 행렬의 크기가 변하는 경우에도 대응할 수 있습니다. 이 예제에서는 vector를 사용하여 행렬 곱셈을 수행합니다.

#include<iostream>
#include<vector>
using namespace std;

int main(){
    vector<vector<int>> A = {{1,2},{3,4}};
    vector<vector<int>> B = {{5,6},{7,8}};
    int n = A.size();
    int m = B[0].size();
    int inner = B.size();
    vector<vector<int>> C(n, vector<int>(m, 0));

    // 행렬 곱셈 연산
    for(int i=0;i<n;++i){
        for(int j=0;j<m;++j){
            for(int k=0;k<inner;++k){
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    // 결과 출력
    for(int i=0;i<n;++i){
        for(int j=0;j<m;++j){
            cout<<C[i][j]<<" ";
        }
        cout<<"\n";
    }
}

 

 

행렬 곱셈은 C++에서 중요한 연산 중 하나입니다. 이번 글을 통해 여러분도 행렬 곱셈을 활용하여 복잡한 문제를 해결하는데 한 걸음 더 나아갈 수 있기를 바랍니다. 다음에는 더 복잡한 행렬 연산에 대해 알아보도록 하겠습니다. 즐거운 코딩 되세요!

댓글