2012-09-03 317 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