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