【发布时间】:2014-10-22 10:52:12
【问题描述】:
我现在使用Ruby,来自MATLAB 背景。我想创建一个对象矩阵,以便能够像在 MATLAB 中那样执行矩阵/数学风格的索引元素(mat(ii,jj) = some cell object)。我在 Ruby 中没有看到类似的矩阵类型对象。
- 我看到的是,最好的选择是创建一个多维数组来给出矩阵的结构,这是否正确?
- 如何在 Ruby 中最好地创建类似矩阵的结构?
- 是否会从初始化点定义行和列大小,之后是否可以更改?
目前,我特别想在这个类似矩阵的结构的元素中插入其他数组对象并执行:(ar=Array.new(3){Array.new(3)})
irb(main):001:0> ar=Array.new(3){Array.new(3)}
=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]]
irb(main):002:0> ar.size
=> 3
irb(main):004:0> ar[0].size
=> 3
irb(main):005:0> ar[0][0].size
NoMethodError: undefined method `size' for nil:NilClass
from (irb):5
from :0
irb(main):006:0> ar[0][0]=[rand,rand,rand]
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733]
irb(main):007:0> ar[1][0]=[rand,rand,rand]
=> [0.698779972364559, 0.290838119763321, 0.41685249594095]
irb(main):008:0> ar[2][0]=[rand,rand,rand]
并继续以这种方式填充 ^matrix^。有没有更好的方法来做到这一点?
但是还是有我不能轻易进行操作的问题,比如:
irb(main):026:0> ar[0][0]
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733]
irb(main):027:0> ar[0][1]
=> [0.360152144966612, 0.611276758393565, 0.0717397147786591]
irb(main):028:0> ar[0][0]-ar[0][1]
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733]
所以我看到的唯一方法是单个索引:
irb(main):032:0> ar[0][0][0]-ar[0][0][1]
=> 0.094046399511456
【问题讨论】:
-
如果没有 IRB 提示,这将更容易阅读。