目次(まとめ)

◾️ Rubyのtransposeメソッドを使って行列データを転置する

◾️ Rのt関数を使って行列データを転置する

◾️ 関連記事


こんにちは、みっちゃんです。

今回の記事では、行列データ(2次元配列)の行と列を入れ替える操作である「転置」を実行するためのサンプルプログラムを紹介します。

Rubyのtransposeメソッドを使って行列データを転置する

rubyでは、以下のように、行列データを準備することができます。ここでは、データ名を "mat" としています。

mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

例えば、以下のようなスクリプト(sample_1.rb)内で指定します。

### sample_1.rb ###

mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for i in 0..(mat.size-1) do
  out = Array.new()
  for j in 0..(mat[i].size-1) do
    out << mat[i][j]
  end
  puts out.join("\t")
end

このスクリプトでは、"join" メソッドを使って、配列要素をタブ文字でつなぎ合わせています(詳しくはこちらの記事をご参照ください)。

これをターミナル上で実行すると、以下のように表示されます。

$ ruby sample_1.rb
1	2	3
4	5	6
7	8	9

表示されているように、いま "mat" という変数には、3行3列の行列が2次元配列として保存されています。

この行列について、行と列を入れ替える(転置する)ためには、transposeメソッドを使用します。スクリプト例は、以下のようになります(sample_2.rb)。

### sample_2.rb ###

mat = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

t_mat = mat.transpose     #行列matを転置させて新しい変数t_matに保存

for i in 0..(t_mat.size-1) do
  out = Array.new()
  for j in 0..(t_mat[i].size-1) do
    out << t_mat[i][j]
  end
  puts out.join("\t")
end

このスクリプトを実行すると、行列が転置していることを確認できます。

$ ruby sample_2.rb
1	4	7
2	5	8
3	6	9

Rのt関数を使って行列データを転置する

Rでは、以下のように、行列データを準備することができます(他にも準備の方法はいろいろあります)。

$ R
> mat <- rbind(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))

"mat" という変数に保存されたデータは、以下のように実行すれば確認することができます。

> mat
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

この行列について、行と列を入れ替える(転置する)ためには、t関数を使用します。

> t(mat)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

関連記事