web-dev-qa-db-ja.com

numpy構造をDjangoデータベースフィールドに格納するためのテクニックは何ですか?また、それらをhttpのためにどのようにシリアル化しますか?

私の研究結果の一部が含まれるはずの小さなWebプロジェクトを公開して、科学コミュニティに提示したいと考えています。これまでに実行したすべての分析は、python=で既に記述されているため、Django Webフレームワークを使用して結果を提供することを検討しました。これは、 Djangoで直接cronを使用して新しいデータの分析を実行できるように、最新のデータを視覚化する予定です。

これまでのところ、私の考えには実際に2つの質問があります。

  1. 配列の構造を維持するためにnumpy arraysをsqliteに簡単に保存するには、どのタイプのDjangoデータベースフィールドが最適ですか?
  2. json.dumpnumpy 2d-arraysをd3.jsで処理できるようにする最良の方法は何ですか?

ご覧のとおり、numpy + Django + d3.jsをまとめることが重要です。最初のハッキングは、numpyの結果を文字列として保存することでしたが、これはまったく最善とは言えません。データベースからプルした後、もう一度解析する必要があります。2番目の質問については、すでに[simplejson.dumps]が見つかりましたが、残念ながら実際にはnumpy arraysでは機能しないため、このようなものをハックする必要が生じることがあります。

return  HttpResponse('{"array1" : '+simplejson.dumps(list(array1))+'}')

私は実際には好きではありません。

もう一度まとめます:

numpy構造体をDjangoデータベースフィールドに格納するための手法と、それらをhttpに対してシリアル化する方法)

5
Milla Well

最良の解決策は、さらに多くの質問に依存します。例:

  1. 配列コンテンツについてDBをクエリする必要がありますか?
    「はい」の場合、おそらく配列を文字列として保存し、文字列をクエリする必要があります(正規表現)。いいえの場合は、 cPickle を使用してシリアル化することを検討してください。 cPickleは高速で、単純な文字列より冗長ではありません。
    とにかく、配列をテキストフィールドに配置する必要があります。

  2. dBに書き込まれた後、pythonで配列を読み取ったり変更したりする必要がありますか?
    「はい」の場合、cPickleが最適です。あなたはそれをdbから読み戻し、numpy配列を再作成し、読み取りまたは変更してから、配列をjsonとしてエンコードします。
    「いいえ」の場合(および配列が極端に大きくない場合)、配列をjsonとして直接保存し、db-recordをそのままhttp-resposeに書き込みます。

3
kr1