2

我想在空矩阵中添加一行(数组)。

就像将数组添加到空数组一样:

a = []
a << [1,2,3]

=> [[1,2,3]]

所以我尝试了以下方法:

require 'Matrix'
m = Matrix[]
m.to_a << [1,2,3]

# => Matrix.empty(0, 0)

然后是以下内容:

m = Matrix[]
Matrix.rows(m.to_a << [1,2,3])

# => Matrix.empty(0, 0)

但它不起作用!它应该创建以下矩阵:

# => Matrix[[1,2,3]]

# and then with each add:
# => Matrix[[1,2,3], [2,3,4], ...]

有任何想法吗?

4

3 回答 3

1

怎么样

m = [[1,2,3], [2,3,4]]
matrix = Matrix.rows(m)

m << [4,5,6]
matrix = Matrix.rows(m)
于 2013-04-15T09:19:41.100 回答
1
require 'Matrix'
m = Matrix[]
p m.object_id #=> 6927492
p m.to_a.class #=> Array
p m.class #=> Matrix
p m.to_a.object_id #=> 6927384
p m.to_a << [1,2,3] #[[1, 2, 3]]
p m #=> Matrix.empty(0, 0)

见上面object_id是不同的。m.to_a不要转换矩阵m本身,而是给出给定矩阵的新数组表示。

现在在下面,创建一个新矩阵,而不是向矩阵本身Matrix.rows(m.to_a << [1,2,3])添加任何行。m从而p m按预期显示结果。

p Matrix.rows(m.to_a << [1,2,3]).class #=> Matrix
p Matrix.rows(m.to_a << [1,2,3]).object_id #=> 6926640
p Matrix.rows(m.to_a << [1,2,3]) #=>Matrix[[1, 2, 3]]
p m #=> Matrix.empty(0, 0)

现在要使其工作,请执行以下操作:

m = Matrix.rows(m.to_a << [1,2,3]) #=>Matrix[[1, 2, 3]]
p m #=>Matrix[[1, 2, 3]]
于 2013-04-15T10:28:08.257 回答
0

它适用于 Ruby 1.9.3p392

1.9.3p392 :001 > require 'matrix'
 => true 
1.9.3p392 :002 > m = Matrix[]
 => Matrix.empty(0, 0) 
1.9.3p392 :003 > m = Matrix.rows(m.to_a << [1,2,3])
 => Matrix[[1, 2, 3]] 
1.9.3p392 :004 > m = Matrix.rows(m.to_a << [2,3,4])
 => Matrix[[1, 2, 3], [2, 3, 4]]

2.0.0p0 也很好

2.0.0p0 :001 > require 'matrix'
 => true 
2.0.0p0 :002 > m = Matrix[]
 => Matrix.empty(0, 0) 
2.0.0p0 :003 > m = Matrix.rows(m.to_a << [1,2,3])
 => Matrix[[1, 2, 3]] 
2.0.0p0 :004 > m = Matrix.rows(m.to_a << [2,3,4])
 => Matrix[[1, 2, 3], [2, 3, 4]]
于 2013-04-15T10:08:10.493 回答