2013-04-15 3 views
1

Я хотел бы добавить строку (массив) в пустую матрицу.Добавить строку (массив) в пустую матрицу

Как добавлять массив пустой массив:

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], ...] 

Любые идеи?

+1

В чем проблема? Меня устраивает. –

+0

@JunZhou какая версия рубин вы используете? как и в Ruby 1.9.3, результат такой же, как 'OP'. Хотя я знаю, почему не работает так, как ожидалось? –

+0

@RubyLovely Я использую 1.9.3p392. Коды отправляются как ответ. Пожалуйста, проверьте это. –

ответ

0

Он отлично работает с Руби 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]] 
+0

Ahh, я нашел проблему. Я не переназначил добавление в матрицу (переменная m). Теперь он отлично работает, спасибо. – ericMTR

0

Как насчет

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

m << [4,5,6] 
matrix = Matrix.rows(m) 
+0

Это прекрасно работает. Только то, что мне было нужно. Спасибо – ericMTR

+1

Обратите внимание, что это технически означает создание новой матрицы, а не «добавление строки» в существующую. Это может иметь как производительность, так и тонкие семантические последствия, которые вы должны иметь в виду. –

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 являются diferrent , 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]] 
Смежные вопросы