Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】行列の転置を求めるプログラムの書き方とサンプルコード

この記事では、Javaを使って行列の転置(転置行列)を求める方法について詳しく解説します。行列とは、数値などの要素を行と列の形式で配置したものであり、m行n列の行列は「m × n 行列」と呼ばれます。

行列の転置とは、元の行列の行と列を入れ替えて作られる新しい行列のことです。具体的には、元の行列の [i][j] 位置にある要素が、転置行列では [j][i] の位置に移動します。

処理内容のイメージ

以下に具体例を示します。

入力(元の行列):

定義された行列は次の通りです:
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

出力(転置後の行列):

行列の転置は次の通りです:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

アルゴリズム

転置行列を求める手順は以下の通りです。

ステップ1 - 処理を開始する
ステップ2 - 整数型の二次元配列 input_matrix と result_matrix を宣言する
ステップ3 - input_matrix に値を設定する
ステップ4 - 二重のforループで行列の各要素を走査し、input_matrix の [i][j] の値を result_matrix の [j][i] に代入する
ステップ5 - result_matrix を表示する
ステップ6 - 処理を終了する

例1:mainメソッド内にすべての処理を記述する場合

まずは、すべての操作を「main」メソッド内にまとめて記述するシンプルな例です。

public class MatrixTranspose {
   static final int matrix_size = 4;
   public static void main (String[] args) {
      int input_matrix[][] = {
         {1, 1, 1, 1},
         {2, 2, 2, 2},
         {3, 3, 3, 3},
         {4, 4, 4, 4}
      };
      System.out.println("定義された行列は次の通りです: \n");
      for (int i = 0; i < matrix_size; i++) {
         for (int j = 0; j < matrix_size; j++) {
            System.out.print(input_matrix[i][j] + " ");
         }
         System.out.println();
      }
      int result_matrix[][] = new int[matrix_size][matrix_size];
      for (int i = 0; i < matrix_size; i++)
         for (int j = 0; j < matrix_size; j++)
            result_matrix[i][j] = input_matrix[j][i];
      System.out.println("\n行列の転置は次の通りです: ");
      for (int i = 0; i < matrix_size; i++) {
         for (int j = 0; j < matrix_size; j++) {
            System.out.print(result_matrix[i][j] + " ");
         }
         System.out.println();
      }
   }
}

出力結果

定義された行列は次の通りです:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

行列の転置は次の通りです:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

例2:オブジェクト指向スタイルでメソッドに分割する場合

次に、転置の処理を独立したメソッドとして切り出し、オブジェクト指向プログラミング(OOP)の考え方に沿って実装した例です。処理をメソッドに分離することで、コードの再利用性と可読性が向上します。

public class MatrixTranspose {
   static final int matrix_size = 4;
   static void transpose(int input_matrix[][]) {
      int result_matrix[][] = new int[matrix_size][matrix_size];
      for (int i = 0; i < matrix_size; i++)
         for (int j = 0; j < matrix_size; j++)
            result_matrix[i][j] = input_matrix[j][i];
      System.out.println("\n行列の転置は次の通りです: ");
      for (int i = 0; i < matrix_size; i++) {
         for (int j = 0; j < matrix_size; j++) {
            System.out.print(result_matrix[i][j] + " ");
         }
         System.out.println();
      }
   }
   public static void main (String[] args) {
      int input_matrix[][] = {
         {1, 1, 1, 1},
         {2, 2, 2, 2},
         {3, 3, 3, 3},
         {4, 4, 4, 4}
      };

      System.out.println("定義された行列は次の通りです: \n");
      for (int i = 0; i < matrix_size; i++) {
         for (int j = 0; j < matrix_size; j++) {
            System.out.print(input_matrix[i][j] + " ");
         }
         System.out.println();
      }
      transpose(input_matrix);
   }
}

出力結果

定義された行列は次の通りです:
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4

行列の転置は次の通りです:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

まとめ

行列の転置は、二重のforループを使って [i][j] と [j][i] の要素を入れ替えるだけで簡単に実装できます。小規模なプログラムではmainメソッドに直接記述しても問題ありませんが、規模が大きくなる場合は例2のように処理をメソッドに分割することで、保守性の高いコードになります。ぜひ実際にコードを動かして、挙動を確認してみてください。

  1. 正方形の面積を求めるJavaプログラムの書き方【初心者向け解説】

    この記事では、Javaを使って正方形の面積を求める方法をわかりやすく解説します。正方形の面積は、次の公式で計算できます。辺 × 辺つまり s2正方形の面積の計算式正方形の1辺の長さを s とすると、その面積は s2(辺の2乗)で表されます。下図のように、縦と横が同じ長さの図形であるため、辺同士を掛け合わせるだけで面積が求まります。入力例1辺の長さ : 4出力例正方形の面積 : 16アルゴリズム処理の流れは以下の手順になります。Step 1 - 開始Step 2 - 整数型の変数 my_side(辺の長さ)と my_area(面積)を宣言するStep 3 - ユーザーから値を読み込む、または値を

  2. Pythonで行列の転置を求めるプログラム

    この記事では、与えられた問題に対する解法とアプローチについて詳しく解説します。 問題文 ある行列が与えられたとき、その転置を同じ行列に格納し、結果を表示する必要があります。 行列の転置とは、行を列に、列を行に入れ替えたものです。言い換えれば、行列Aの転置は、要素A[i][j]をA[j][i]と入れ替えることで得られます。 実装例 N = 4 def transpose(A): for i in range(N): for j in range(i+1, N): A[i][j], A[j][i] = A[j][i], A[i][j] # ドライ