2012-09-03 264 views
0

我有一个[float,(float,float,float ..)]的列表...这基本上是一个n维点以及适合每个值的值点。 例如。将int列表转换为numpy数组

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

afaik np数组必须是相同类型的所有元素... –

+0

是否可以将其转换为3维数组?还是我改变这个列表的形成本身,使其3维? – Nicomoto

回答

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)阵列。

+0

这工作谢谢!但在这种情况下并没有真正的帮助。因为我试图为随机选择分配适应值。这使我回到了在多维数组中切分一维的初始问题......! – Nicomoto

+1

@Nicomoto,编辑帮助? –

+0

好吧,似乎工作...非常感谢你! – Nicomoto

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. ]]) 
+0

那么,健身是不同的坐标,我想保持它的方式..但我想我可以做到这一点,并添加1我想要访问的坐标! – Nicomoto

+0

唯一的问题是,我的尺寸是可变的。所以我可能在元组中有(b,c,d)或(b,c,d,e ...),这可以推广吗? – Nicomoto