Java/Daily-Java

[Array] 행렬의 곱셈

모모토 2021. 4. 11. 02:05
반응형

● Array를 이용한 행렬의 계산 코드

 

1) 행렬의 곱셈 조건

 

행렬의 곱셈에 대해 간단히 알아야 할 규칙 

 

A =(axb) , B=(bxc)

AB = (axc)

 

2) 코드구상

 

행렬을 담을 배열을 선언&생성하자

 

int[][] m1 = {  // 2x3 행렬
              {1,2,3},
              {4,5,6}
              };

int[][] m2 = {	// 3x2 행렬
              {1,2},
              {3,4},
              {5,6}
              };
              final int ROW = m1.length; // 행렬의 연산결과로 생긴 행의 길이
              final int COL = m2[0].length; // 열의 길이
              
int[][] m3 = new int[ROW][COL]; //연산의 결과가 들어갈 배열

 

결과값 행렬 AB = (axc) 의 값을 출력하기 위해 (행의 길이-1)번의 연산을 (열의 길이-1)번 만큼해주어야 한다.

 

적어도 2개이상의 for문을 필요로 함 정확한 코드구상을 위해 손으로 써보자

 

가로로 m3의 한행을 출력시키는 코드를 구상하고 이러한 행렬의 곱셈을 반복할 for문을 구상해보자

 

역시 머리만으론 힘드므로 펜과 종이를 이용하면

 

m3의 한행을 계산하는 과정중 3가지의 변수를 발견할 수 있다. 검은색 빨간색 파란색의 변수를 통제하기 위하여 

 

3개의 for문을 사용하였다. 앞으로도 for문을 사용하기 위해선 몇번의 for문을 써야할지는 변수가 몇개인지 확인해보자!

 

public class MultiArrEx03 {
	public static void main(String[] args) {
		int[][] m1 = {
				{1,2,3},
				{4,5,6}
		};
		
		int[][] m2 = {
				{1,2},
				{3,4},
				{5,6}
		};
		
		final int ROW    = m1.length;
		final int COL    = m2[0].length;
		final int M2_ROW = m2.length;
		
		int[][] m3 = new int[ROW][COL];
		
		for(int i=0;i<ROW;i++)
			for(int j=0;j<COL;j++)
				for(int k=0;k<M2_ROW;k++)
				m3[i][j] += m1[i][k] * m2[k][j];
		
		for(int i=0;i<ROW;i++) {
			for(int j=0;j<COL;j++) {
				System.out.printf("%3d",m3[i][j]);
			}
			System.out.println();
		}
	}
}