目次(まとめ)
◾️ 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