0

比較的大きなnumpy配列から辞書を作成しようとしています。私は次のように辞書コンストラクターを使用してみました:

elements =dict((k,v) for (a[:,0] , a[:,-1]) in myarray)

エラーが発生したため、これを誤って実行していると想定しています。"ValueError: too many values to unpack"

numPy配列は次のようになります。

[  2.01206281e+13  -8.42110000e+04  -8.42110000e+04 ...,   0.00000000e+00
    3.30000000e+02  -3.90343147e-03]

最初の列2.01206281e+13をキーにし、最後の列-3.90343147e-03を配列の各行の値にします

私は正しい方向に進んでいますか/これを行うためのより良い方法はありますか?

ありがとう

編集:より明確にしましょう。最初の列をキーにし、最後の列を値にします。numpy配列のすべての行に対してこれを実行したい

4

2 に答える 2

2

これは、myarray が正確に何であるかを知らずに答えるのが難しい質問ですが、これは始めるのに役立つかもしれません。

>>> import numpy as np
>>> a = np.random.randint(0, 10, size=(3, 2))
>>> a
array([[1, 6],
       [9, 3],
       [2, 8]])
>>> dict(a)
{1: 6, 2: 8, 9: 3}

また

>>> a = np.random.randint(0, 10, size=(3, 5))
>>> a
array([[9, 7, 4, 4, 6],
       [8, 9, 1, 6, 5],
       [7, 5, 3, 4, 7]])
>>> dict(a[:, [0, -1]])
{7: 7, 8: 5, 9: 6}
于 2012-07-03T18:21:20.997 に答える
0
elements = dict( zip( * [ iter( myarray ) ] * 2 ) )

ここでわかるのは、myarray リストに基づいて反復子を作成していることです。それをリストに入れて2倍にします。これで、リストの 1 番目と 2 番目の場所にバインドされた同じ反復子が得られました。このイテレータは、dict 作成者用のペアのリストを作成する zip 関数に引数として渡されます。

于 2012-07-03T18:03:10.120 に答える