Ruby:将String转换为Matrix

时间:2016-05-18 10:35:08

标签: ruby string matrix

我已将带矩阵的哈希保存到文件中,如下所示:

File.open("test.json", "w+") { |file| file.write("#{hash.to_json}") }

哈希包含以下数据:

{0=>Matrix[[-0.03, 1.3],[0.1,-0.45]],1=>Matrix[[-1.9,1.8,-0.6]]}

现在我读了保存的文件:

contents = File.read('test.json')
hashAgain = JSON.parse(contents) #Convert it to hash

但是如果我想在哈希中访问矩阵,则矩阵不再是矩阵数据格式:

puts netTrained.values[0].class #=>String

我的问题是如何将“矩阵”字符串转换回矩阵数据格式?

2 个答案:

答案 0 :(得分:2)

首先,您定义了第一个矩阵错误。行数不同。

Matrix[[-0.03, 1.3, -0.6],[0.1,-0.45]]

给出

  

ExceptionForMatrix :: ErrDimensionMismatch:行大小不同(2应该   是3)

Matrix不接受创建的字符串。但它接受阵列。因此,一种解决方案是将数组保存在文件而不是Matrix字符串中。如果保存在文件“0.1,-0.45”中,则可以执行以下操作:

Matrix["0.1, -0.45".split(',')]

答案 1 :(得分:0)

当然,你可以这样做:

require 'json'
require 'matrix'

m0, m1 = Matrix[[1,2],[3,4]], Matrix[[5,6],[7,8]]
  #=> [Matrix[[1, 2], [3, 4]], Matrix[[5, 6], [7, 8]]] 
h = {0=>m0, 1=>m1 }
  #=> {0=>Matrix[[1, 2], [3, 4]], 1=>Matrix[[5, 6], [7, 8]]}
js = h.to_json
  #=> "{\"0\":\"Matrix[[1, 2], [3, 4]]\",\"1\":\"Matrix[[5, 6], [7, 8]]\"}" 
File.write("temp", js)
  #=> 59
JSON.parse File.read("temp")
  #=> {"0"=>"Matrix[[1, 2], [3, 4]]", "1"=>"Matrix[[5, 6], [7, 8]]"}

没有require json,我们有:

ObjectSpace.each_object(Module).select { |m| m.instance_methods.include?(:to_json) }
  #=> []

但是

之后
require 'json'

我们有:

to_json_modules = ObjectSpace.each_object(Module).select { |m|
  m.instance_methods.include?(:to_json) }
to_json_modules.size
  #=> 527 (Ruby v2.3.0) 
to_json_modules.include?(Matrix)
  #=> true