我已将带矩阵的哈希保存到文件中,如下所示:
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
我的问题是如何将“矩阵”字符串转换回矩阵数据格式?
答案 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