0

[float, (float,float,float ..) ] のリストがあります ... これは基本的に n 次元のポイントであり、各ポイントのフィットネス値が含まれています。たとえば。

4.3, (2,3,4)
3.2, (1,3,5)
.
.
48.2, (23,1,32)

フィットネス値に基づいて 1 つのポイントをランダムにサンプリングしたいと考えています。これを行う最良の方法は、使用することであると判断しましたnumpy.random.choice(range(n), 1, plist[:,:1,:1])

ただし、これをnumpy配列に変換する必要があるため、試しました

>> pArr = np.array( plist ) 
ValueError: setting an array element with a sequence

np.asarray(plist) でも同じエラーが発生しました..何か提案はありますか??

4

2 に答える 2

1

あなたの質問はわかりにくいです。これはあなたがやろうとしていることですか?

>>> x
[[4.3, (2, 3, 4)], [3.2, (1, 3, 5)], [48.2, (23, 1, 32)]]
>>> np.array([(a, b, c, d) for a, (b, c, d) in x])
array([[  4.3,   2. ,   3. ,   4. ],
       [  3.2,   1. ,   3. ,   5. ],
       [ 48.2,  23. ,   1. ,  32. ]])
于 2012-09-03T20:11:43.860 に答える
1

以下が機能するはずです。

A = np.array([tuple(i) for i in initial_list],dtype=[('fitness',float),('point',(float,3))])

initial_list = [[4.3, (2, 3, 4)], [3.2, (1, 3, 5)], ...]。そのトリックを機能させるには、各項目をinitial_listタプルに変換する必要があることに注意してください。そうしないと、NumPy は構造を認識できません。

あなたのフィットネス エントリーは としてアクセスできA['fitness']、対応するポイントは として表示されA['point']ます。実際のフィットネス エントリのリスト を選択した場合indices、対応するポイントはA['point'][indices]単純な(n,3)配列である によって与えられます。

于 2012-09-03T20:12:16.373 に答える