Method: Cumo::NArray.parse

Defined in:
lib/cumo/narray/extra.rb

.parse(str, split1d: /\s+/, split2d: /;?$|;/, split3d: /\s*\n(\s*\n)+/m) ⇒ Object

parse matrix like matlab, octave

Examples:

a = Cumo::DFloat.parse %[
 2 -3 5
 4 9 7
 2 -1 6
]
=> Cumo::DFloat#shape=[3,3]
[[2, -3, 5],
 [4, 9, 7],
 [2, -1, 6]]


137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/cumo/narray/extra.rb', line 137

def self.parse(str, split1d:/\s+/, split2d:/;?$|;/,
               split3d:/\s*\n(\s*\n)+/m)
  a = []
  str.split(split3d).each do |block|
    b = []
    #print "b"; p block
    block.split(split2d).each do |line|
      #p line
      line.strip!
      if !line.empty?
        c = []
        line.split(split1d).each do |item|
          c << eval(item.strip) if !item.empty?
        end
        b << c if !c.empty?
      end
    end
    a << b if !b.empty?
  end
  if a.size == 1
    self.cast(a[0])
  else
    self.cast(a)
  end
end