将一个int,tuples列表转换为numpy数组

时间:2012-09-03 20:06:04

标签: python arrays list numpy tuples

我有一个[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)也有同样的错误..任何建议??

2 个答案:

答案 0 :(得分: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. ]])

答案 1 :(得分: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)数组。