2016-03-31 5 views
1

私は 浮動小数点数の配列を文字列にシリアル化するにはどうすればよいですか?

  • (例えば[[0.1,0.3,0.2],[0.1,0.3,0.2]])(ジャバスクリプトのような)listにこの配列を変換し、山車の巨大なnumpyの配列を持っている〜1500 * 2500pxを言うと、私は

    1. にしたいがための文字列にシリアライズサーバーへのPOST要求。

    (1)の操作方法がわかりません。 (2)については、numpy.array_str()array2string()、およびarray_repr()の関数を見て、それらは配列の表現を返しますが、完全な配列は返しません。

    どうすればよいですか?

  • +0

    予想される文字列は何ですか? –

    答えて

    -1

    あなたは、通常のPythonのリストに変換し、その文字列

    [[0.7998950511604668、0.3504357174428122、0.4516363276829708、0.42090556177992977]、[0.5151195486975273、0.7101183117731774、0.9530575343271824が得られ

    arr = np.random.rand((10,10)) 
    final_string = str(arr.tolist()) 
    

    にすることができます、0.39869760958795464]、[0.20318293100519536、0.17244659329654555、0.3530236209359401、0.2081303162461341]、[0.9186758779272243、0.9300730012004015、0.14121513893149895、0.39315493832613735]

    +2

    Pythonオブジェクトのデフォルト文字列表現は、直列化のために多少揮発性の選択肢です。 'json.dumps'はより安定したアプローチを提供しますが、現時点では同じ結果が得られます。 –

    1

    なぜこの配列をJavaScriptアレイのように見たいのかわからないので、私はあなたが望むように(私が自由に情報がなければ自由であるので)推測しています。あまりにも多くのフロントエンドプロセスにアレイを伝えることができました。ネットワークパイプ全体では、およそ400万の要素が依然として大量のデータです。だから、いつものように、問題の背景が役立つでしょう(そしてあなたの質問を編集してそれを提供することもできます)。

    送信または保存のためにデータをシリアル化したい場合、JavaScriptに理解できる文字列としてレンダリングする最も簡単な方法(私は "見た目"の意味を知りませんでした)はjson標準を使用していますとしょうかん。これはint、浮動小数点数、真理値および文字列のリストとディクテーションをネイティブにエンコードすることはできないため、行列をリストのリストとして表現するにはどうすればよいかという問題に直面しています。

    小さな例ですが、これは暗闇の中のランダムなショットです。まず のはで動作するように設定し管理しやすいデータを作成してみましょう:

    a = np.random.randn(4, 5) 
    

    これは、直接JSONで表現することはできません。むしろ、冗長(それはおそらく、オブジェクトのreprを呼んだ)が、分かりやすい結果として

    import json 
    try: 
        json.dumps(a) 
    except Exception as e: 
        print "Exception", e 
    

    真のメッセージ

    Exception array([[ 1.24064541, 0.97989932, -0.8469167 , -0.27318908, 1.21954134], 
         [-1.30172725, 0.41261504, 1.39895842, 0.75260258, -1.34749298], 
         [-0.38415007, -0.56925321, -1.59202204, 1.29900292, 1.91357277], 
         [ 1.06254537, 2.75700739, -0.66371951, 1.36906192, -0.3973517 ]]) is not JSON serializable 
    

    私たちがインタプリタにリストをリストに変換するよう頼んだら、配列オブジェクトのリストに変換する:その結果として

    list(a) 
    

    番組リストにそれら配列を変換するために同じ関数を使用し

    [array([ 1.24064541, 0.97989932, -0.8469167 , -0.27318908, 1.21954134]), 
    array([-1.30172725, 0.41261504, 1.39895842, 0.75260258, -1.34749298]), 
    array([-0.38415007, -0.56925321, -1.59202204, 1.29900292, 1.91357277]), 
    array([ 1.06254537, 2.75700739, -0.66371951, 1.36906192, -0.3973517 ])] 
    

    するリストの使用可能なリストを与える:

    list(list(r) for r in a) 
    

    評価中

    [[1.2406454087805279, 
        0.97989932000522928, 
        -0.84691669720415574, 
        -0.27318907894171163, 
        1.219541337120247], 
    [-1.3017272505660062, 
        0.41261503624079976, 
        1.3989584188044133, 
        0.75260257672408482, 
        -1.3474929807527067], 
    [-0.38415007296182629, 
        -0.56925320938196644, 
        -1.5920220380072485, 
        1.2990029230603588, 
        1.9135727724853433], 
    [1.0625453748520415, 
        2.7570073901625185, 
        -0.66371950666590918, 
        1.3690619178580901, 
        -0.39735169991907082]] 
    

    これは、私は、文字列に変換してここで行うJSONに極めてコンバーチブルです:

    json.dumps(list(list(r) for r in a)) 
    

    (文字列)を与える

    '[[1.2406454087805279, 0.97989932000522928, -0.84691669720415574, -0.27318907894171163, 1.219541337120247], [-1.3017272505660062, 0.41261503624079976, 1.3989584188044133, 0.75260257672408482, -1.3474929807527067], [-0.38415007296182629, -0.56925320938196644, -1.5920220380072485, 1.2990029230603588, 1.9135727724853433], [1.0625453748520415, 2.7570073901625185, -0.66371950666590918, 1.3690619178580901, -0.39735169991907082]]' 
    

    を引き起こすあなたは結果が正しいことを確認することができますリストのリストを再構成し、配列と比較する(引数の1つがnumpy配列なので、比較は要素単位で行われる)。

    s = json.dumps(list(list(r) for r in a)) 
    lofls = json.loads(s) 
    lofls == a 
    
    array([[ True, True, True, True, True], 
         [ True, True, True, True, True], 
         [ True, True, True, True, True], 
         [ True, True, True, True, True]], dtype=bool) 
    

    私はあなたの質問を正しく理解しましたか?

    関連する問題