0

我有一个 [float, (float,float,float..) ] 的列表...基本上是一个 n 维点以及每个点的适应度值。例如。

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

我希望根据适应度值随机抽样一个点。我决定最好的方法是使用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 回答