我现在使用Ruby
,来自MATLAB
背景。我想创建一个对象矩阵,以便能够执行索引元素的矩阵/数学样式,如在MATLAB中(mat(ii,jj)= 某些单元格对象)。我没有在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]
并继续以这种方式填充^矩阵^。有更好的方法吗?
但仍然存在无法轻松执行操作的问题,例如:
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
答案 0 :(得分:0)
有一个Matrix class:
require 'matrix'
m = Matrix[[0,1,0],[1,0,0],[0,1,1]]
m.det #=> -1
m.diagonal? #=> false
m.trace #=> 1
您可以使用以下方法轻松创建随机矩阵:
m = Matrix.build(3,3) { rand }
注意:矩阵只能提供2d矩阵,如果你需要更多尺寸,你需要自己构建它。