如何在Ruby中向Matrix添加列和行?

Sky*_*lar 2 ruby vector matrix

如果我在Ruby中有一个现有的Matrix,我该如何添加一列或一行新数据?

我想做的是这样的:

require 'Matrix'
my_matrix = Matrix.diagonal(1,2,3)
my_matrix.append_row!([3,2,1])
my_matrix.append_column!([3,2,1])
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

And*_*all 5

由于这不是(据我所知)数学意义上的有效矩阵运算,所以没有任何事情可以做到这一点.您可以创建一个新的Matrix:

m = Matrix.diagonal(1, 2, 3)
#=> Matrix[[1, 0, 0], [0, 2, 0], [0, 0, 3]]

Matrix.columns(m.to_a << [4, 5, 6])
#=> Matrix[[1, 0, 0, 4], [0, 2, 0, 5], [0, 0, 3, 6]]

Matrix.rows(m.to_a << [4, 5, 6])
#=> Matrix[[1, 0, 0], [0, 2, 0], [0, 0, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)

这通过向原始矩阵的数组表示添加新数组来使用columnsrows创建新矩阵.

  • 小建议:列添加示例有效,因为矩阵是对角对称的.我相信你想要`Matrix.columns(m.transpose.to_a << [4,5,6])`添加一列而不重新排序项目. (3认同)