2014-07-04 165 views
-1

我有一個數組的數組:如何Python的數組映射到一個NumPy的陣列

import numpy as np 
from numpy import array 
data = [[1.0,0.56,1.3,1.0], 
     [2.0,0.59,1.3,1.0], 
     [3.0,0.63,1.3,1.0], 
     [4.0,0.66,1.3,1.0]] 

,我試圖映射到這個NumPy的形式:

[[array([ 0., 1.]), array([ 0., 0.56]), array([ 0., 1.3]), array([ 0., 1.])], [array([ 0., 2.]), array([ 0., 0.59]), array([ 0., 1.3]), array([ 0., 1.])], [array([ 0., 3.]), array([ 0., 0.63]), array([ 0., 1.3]), array([ 0., 1.0.])], [array([ 0., 4.]), array([ 0., 0.66]), array([ 0., 1.3]), array([ 0., 1.])]] 

我已經試圖做到以下幾點:

s = Set([]) 
maxNDimValues = max(map(lambda x: len(s.union(Set(x))), transpose(data))) 
valueMap = identity(maxNDimValues).astype(float64) 
trainingitems = map(lambda x: map(lambda y: valueMap[y-1], x), data) 

但它沒有奏效。

+1

如果'data'是列表的列表,爲什麼'np.array(data)'不夠? – Praveen

+0

爲什麼要1-d陣列的列表,而不是單一的2-d陣列? – jonrsharpe

+0

出於某種原因,當我想這是印在其原來的形式排列,雖然我進口numpy的從numpy的 – SalmaFG

回答

2

哦,我想我看到你想現在要做什麼。從列表的列表,你(出於某種原因我真的不明白)想數組元素的列表的列表,每個包含與原項目沿0。

最明顯的方法(以兩倍的for循環的成本)

result = [[np.array([0, x]) for x in row] for row in data] 

更好的事情可能是利用3維數組numpy的的。

temp = np.array(data) 
temp = np.expand_dims(temp, 2) 
result = np.concatenate((np.zeros(temp.shape), temp), axis=2) 
+0

第一個變種幾乎尖叫聲被寫成一個列表理解NP和陣列,它只是如此簡潔'[[NP。數組中的行([0,x])用於行中的數據]。 –

+0

是的,這正是我試圖做。謝謝! – SalmaFG

+0

@moarningsun確實是這樣,因爲我使用Python大多隻用numpy的,我從來沒有真正花時間關閉學習如何編寫簡潔純Python。如所建議的那樣編輯。 – Praveen

相關問題