2

Breeze ( https://github.com/scalanlp/breeze ) の DenseVector クラス ( http://www.scalanlp.org/api/breeze/#breeze.linalg.DenseVector )のオブジェクトを pickle 化および unpickle してみました。カスタム ピクラーを追加する必要はありませんでした。pickle 化は成功しましたが、unpickle すると scala.MatchError がスローされました。コードを以下に示します。この問題をデバッグする際のヘルプ/ポインターは大歓迎です! 興味深いことに、問題なく DenseMatrix をピクル/アンピクルすることができました。

import scala.pickling._
import scala.pickling.Defaults._
import json._
import breeze.linalg.DenseVector

val vec = DenseVector(1.1, 2.2)
val pickledVec = vec.pickle
println(pickledVec)

val unpickledVec = pickledVec.unpickle[DenseVector[Double]]
println(unpickledVec)

出力は次のとおりです。

JSONPickle({
  "$type": "breeze.linalg.DenseVector$mcD$sp",
  "data": [
    1.1,
    2.2
  ],
  "offset": 0,
  "stride": 1,
  "length": 2,
  "noOffsetOrStride": true
})

scala.MatchError: [1.1, 2.2] (of class scala.util.parsing.json.JSONArray)
  at scala.pickling.json.JSONPickleReader.readField(JSONPickleFormat.scala:244)
  at scala.pickling.json.JSONPickleReader.beginCollection(JSONPickleFormat.scala:249)
  at scala.pickling.runtime.RuntimePicklersUnpicklers$$anon$1.unpickle(CustomRuntime.scala:110)
  at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4$$anonfun$fieldVals$1$1.apply(Runtime.scala:225)
  at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4$$anonfun$fieldVals$1$1.apply(Runtime.scala:200)
  at scala.collection.immutable.List.map(List.scala:273)
  at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4.fieldVals$1(Runtime.scala:200)
  at scala.pickling.runtime.InterpretedUnpicklerRuntime$$anon$4.unpickle(Runtime.scala:242)
  at BreezeLinalgDenseVector$u005BscalaDouble$u005DUnpickler$macro$4$2$.unpickle(<console>:24)
  at scala.pickling.Unpickler$class.unpickleEntry(Pickler.scala:79)
  at BreezeLinalgDenseVector$u005BscalaDouble$u005DUnpickler$macro$4$2$.unpickleEntry(<console>:24)
  at scala.pickling.functions$.unpickle(functions.scala:11)
  at scala.pickling.UnpickleOps.unpickle(Ops.scala:23)
  ... 53 elided
4

0 に答える 0