카테고리 없음

[C++] 행렬 곱셈

흑요석s 2023. 9. 6. 15:42
int main()
{
    matrix matA ={
        {1,2,3},
        {4,5,6},
        {7,8,9}
    };

    matrix matB ={
        {1,2,3},
        {1,2,3},
        {1,2,3}
    };

    matrix matC = multiply(matA, matB);
    
    for (int i = 0; i<matC.size();++i){
        for (int j =0; j<matC[i].size(); ++j){
            cout << " " << matC[i][j];
        }
        cout << "\n";
    }

    return 0;
}​

 

  1. 매트릭스 초기화:
    • 행렬 C(A.size(), vector<double>(B[0].size(), 0));는 결과 행렬 C를 초기화합니다. A.size()는 행렬 A의 행 수를 제공하고 B[0].size()는 행렬 B의 열 수를 제공합니다. 따라서 C는 A와 동일한 수의 행과 B와 동일한 수의 열을 갖는 빈 행렬로 초기화됩니다.
  2. 행렬 곱셈:
    • 이 코드는 곱셈을 수행하기 위해 세 개의 중첩된 for 루프를 사용합니다.
      • 가장 바깥쪽 루프(for (int i = 0; i < A.size(); i++))는 행렬 A의 행을 반복합니다.
      • 중간 루프(for (int j = 0; j < B[0].size(); j++))는 행렬 B의 열을 반복합니다.
      • 가장 안쪽 루프(for (int k = 0; k < A[0].size(); k++))는 공통 차원(A의 열 수와 B의 행 수)을 반복합니다.
  3. 행렬 요소 계산:
    • 가장 안쪽 루프 내에서 코드는 행렬 A의 i번째 행과 j'의 내적을 수행하여 [i][j]위치에서 결과 행렬C의 각 요소를 계산합니다. 행렬 B의 -번째 열. 이는 C[i][j] += A[i][k] * B[k][j]; 공식을 사용하여 수행됩니다.
  4. 결과 매트릭스:
    • 모든 계산이 완료된 후 결과 행렬 'C'에는 행렬 'A'와 'B'의 곱이 포함됩니다.
  5. 반품 결과:
    • 이 함수는 결과 행렬 'C'를 행렬 'A'와 'B'의 곱으로 반환합니다.
  6. 결과 인쇄:
    • main 함수에서 코드는 두 개의 행렬 matA와 matB를 정의하고 multiply 함수를 호출하여 두 제품의 곱을 계산하고 결과를 matC에 저장합니다.
    • 마지막으로 코드는 행렬 matC의 요소를 인쇄하여 결과를 표시합니다.

 

#include <iostream>
#include <vector>  //vector 포맷 사용

using namespace std;
using matrix = vector<vector<double>>;

matrix multiply(matrix A,matrix B)
{
    matrix C(A.size(), vector<double>(B[0].size(), 0)); 
    // A가 N by M , B가 M by P 라고 하면  N * P 행렬이 도출됨
    for (int i = 0; i<A.size(); i++)
    {
        for (int j = 0; j < B[0].size(); j++)
        {
            for (int k = 0; k < A[0].size(); k++)
            {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
    return C;
}