2009-09-26 148 views
0

就我所知,矩阵非常不灵活。因此,我试图获得一组处理的矢量。我的需求是:能够添加向量并对其组件进行算术运算。写下面的代码,问题:矩阵,向量和阵列

require 'matrix' 

x = Matrix.rows(IO.readlines("input.txt").each {|line| line.split}) 

puts x.row_vectors 

红宝石属于例外。为什么?

matrix.rb:1265:in `to_s': undefined method `join' for "1.2357 2.1742 -5.4834 -2.0735":String (NoMethodError) 

好吧,我已经平静下来,尝试了另一种方法。我写道:

a = Array.[](IO.readlines("input.txt").each {|line| Vector.[](line.split) }) 

但是我可以访问数组内我的载体的唯一方法是adressing第二索引:

puts a[0][0] 

这意味着,当我想要访问一个向量内期望的标量,我会被迫使用第三个索引,如:

puts a[0][0][1] 

所以,第二个问题是 - 第二个索引来自哪里?如何摆脱它?将数据读入数组时,我错过了什么吗?

回答

1

我无法再现您的第一个问题。提取看起来像input.txt的内容,我可以执行第一个表达式,而不会出现异常。

至于第二个问题,你的表情看起来有些复杂。如何:

b = IO.readlines("input.txt").map { |x| x.split(' ') } 

这会给你一个“2D”数组数组,你只需要两个下标。 (至于你对额外数组来自哪里的问题,你从数组构造函数中得到一个,IO.readlines得到一个,从Vector构造函数...我得到一个。)

或者也许:

result = [] 
IO.foreach('input.txt') { |ln| result << ln.split(' ') } 
+0

你说得对。无论如何,现在我得到了另一个类似的问题http://stackoverflow.com/questions/1480996/accessing-aan-array-of-vectors-trouble – gmile 2009-09-26 11:10:24