2014-07-04 134 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

相关问题