3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

転置行列を求める練習

Last updated at Posted at 2015-02-20

#問題

入力された行列の転置行列を求めよ

こちらのサイトから引用

#解答

transposed_matrix.rb
# 受け取った行列を表示するメソッド
def show_matrix(matrix)
  matrix.length.times do |col|
    matrix[0].length.times do |row|
      print format('%2d ', matrix[col][row])
    end
    print "\n"
  end  
end

# 入力行列の列数
MATRIX_COL = 3
# 入力行列の行数
MATRIX_ROW = 3

# 入力となる行列の宣言
t_matrix = Array.new(MATRIX_ROW).map{ Array.new(MATRIX_COL) }

# 値のセット
# 練習も兼ねてランダムにセット
# 値は1〜20までの整数値
t_matrix.length.times do |col|
  t_matrix[0].length.times do |row|
    # rand(1..20)で1〜20の範囲で乱数を生成っていう意味
    t_matrix[col][row] = rand(1..20)
  end
end  
  
# 入力した行列の表示
puts "入力した行列を表示します"
show_matrix(t_matrix)

# 転置行列を求める
puts "転置行列を求めます"

# 列は0番目から始めて(列の長さ - 2)回繰り返す
(0..(t_matrix.length-2)).each do |col|
  # 行は(currentの列 + 1)番目から始めて(行の長さ-1)まで繰り返す
  (1..(t_matrix.length-1)).each do |row|
    # 配列の中身を入れ替え
    t_matrix[col][row], t_matrix[row][col] = t_matrix[row][col], t_matrix[col][row]
  end
end

#転置行列を表示
puts "転置行列を表示します"
show_matrix(t_matrix)

#結果

入力した行列を表示します
 3  9  5 
16 10  2 
15  7 15 
転置行列を求めます
転置行列を表示します
 3 16 15 
 9 10  7 
 5  2 15 

#追記
Array#transposeを使うと
楽に転置行列を求められることを教えていただきました。(コメント参照)
今回は練習を兼ねて自力で解いてみました。

3
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?