2009-09-26 117 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