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

C#で行列を転置する方法をわかりやすく解説

行列の転置(Transpose)とは

行列の転置とは、行列を対角線を軸として反転させる操作のことです。この操作により、行の要素が列へ、列の要素が行へと入れ替わります。

具体例を見てみましょう。

転置前の行列:
1 2 3
4 5 6
7 8 9

転置後の行列:
1 4 7
2 5 8
3 6 9

このように、元の行列の第1行「1 2 3」が転置後には第1列「1 4 7」ではなく「1, 2, 3」が縦方向に並ぶ形となり、行と列が完全に入れ替わっていることが確認できます。

C#で行列を転置するサンプルコード

以下は、C#で行列の転置を実現するプログラムの例です。ユーザーから行数・列数および各要素を入力してもらい、転置前後の行列を表示します。

コード例

using System;
public class Demo {
    public static void Main() {
        int i, j, m, n;
        int[] arr1 = new int[30, 30];
        int[] arr2 = new int[30, 30];

        Console.Write("\n行列の行数と列数を入力してください:\n");
        Console.Write("行数 = ");
        m = Convert.ToInt32(Console.ReadLine());

        Console.Write("列数 = ");
        n = Convert.ToInt32(Console.ReadLine());

        Console.Write("行列に要素を設定してください...\n");
        for (i = 0; i < m; i++) {
            for (j = 0; j < n; j++) {
                Console.Write("\n [{0}],[{1}] : ", i, j);
                arr1[i, j] = Convert.ToInt32(Console.ReadLine());
            }
        }

        Console.Write("\n\n転置前の行列:\n");
        for (i = 0; i < m; i++) {
            Console.Write("\n");
            for (j = 0; j < n; j++)
            Console.Write("{0}\t", arr1[i, j]);
        }

        for (i = 0; i < m; i++) {
            for (j = 0; j < n; j++) {
                arr2[j, i] = arr1[i, j];
            }
        }

        Console.Write("\n\n転置後の行列: ");
        for (i = 0; i < m; i++) {
            Console.Write("\n");
            for (j = 0; j < n; j++) {
                Console.Write("{0}\t", arr2[i, j]);
            }
        }
        Console.Write("\n\n");
    }
}

実行結果

上記のプログラムを実行すると、以下のような結果が出力されます。ここでは、行数・列数、そして行列の各要素の値をユーザーが入力します。

行列の行数と列数を入力してください:
行数 = 3
列数 = 3
行列に要素を設定してください...

[0],[0] : 1
[0],[1] : 2
[0],[2] : 3
[1],[0] : 4
[1],[1] : 5
[1],[2] : 6
[2],[0] : 7
[2],[1] : 8
[2],[2] : 9

転置前の行列:
1 2 3
4 5 6
7 8 9

転置後の行列:
1 4 7
2 5 8
3 6 9

転置処理のポイント

転置の中核となるのは、次の二重ループの部分です。元の行列 arr1 の要素 [i, j] を、新しい行列 arr2 の [j, i] に代入することで、行と列を入れ替えています。

for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
        arr2[j, i] = arr1[i, j];
    }
}

添字の順序を逆にするだけで転置が実現できるため、C#の2次元配列を使えば非常にシンプルに実装できます。正方行列だけでなく、行数と列数が異なる行列にも対応可能な点も覚えておくと便利です。

  1. C#のConsoleクラスとは?主要プロパティの使い方を実例付きで解説

    C#のConsoleクラスは、コンソールアプリケーションにおける標準入力・標準出力・標準エラー出力の各ストリームを表すクラスです。テキストの表示や入力の読み取りだけでなく、文字色や背景色の変更、カーソル位置やサイズの制御など、コンソール操作に関するさまざまな機能が提供されています。ここでは、Consoleクラスの代表的なプロパティの使い方を、サンプルコードと実行結果とあわせて解説します。Console.CursorLeftプロパティコンソール上のカーソル位置(左端から数えた列位置)を変更するには、Console.CursorLeftプロパティを使用します。サンプルコードusing System

  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] # ドライ