据我了解,矩阵的使用非常不灵活。因此,我试图让一系列向量处理。我的需求是:能够添加向量并对其组件进行算术运算。编写下面的代码,
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) } )
但我能在数组中访问我的向量的唯一方法是使用第二个索引:
puts a[0][0]
这意味着,当我想在向量中访问所需的标量时,我将被迫使用第三个索引,如:
puts a[0][0][1]
所以,第二个问题是 - 第二个指数来自哪里?如何摆脱它?在将数据读入数组时我是否遗漏了什么?
答案 0 :(得分:1)
我无法重现你的第一个问题。提取看起来像input.txt的东西,我可以执行第一个表达式而没有异常。
关于第二个问题,你的表达似乎有点复杂。怎么样:
b = IO.readlines("input.txt").map { |x| x.split(' ') }
这将为您提供一个“2D”数组数组,您只需要两个下标。 (至于你关于额外数组来自哪里的问题,你有一个来自Array构造函数,一个来自IO.readlines,一个来自Vector构造函数 ... 我认为。)
或者也许:
result = []
IO.foreach('input.txt') { |ln| result << ln.split(' ') }