2015-11-16 26 views
0

使用np,如何创建一个新的numpy数组,它是2个numpy数组的组合?切片/矢量化表示法中的Numpy数组聚合

这里的问题是:

x = [[a1,a2],[b1,b2],...] # this is an ndarray 
y = [a,b,c,...] # ditto 

xnew = [[a1,a2,a],...] 

xnew = [([a1,a2],a), ...]

这是我将如何使用列表解决这个问题,并为循环:

xnew = [(x[i],y[i]) for i in range(len(x))] 

我该怎么使用同样的事情numpy的?

+0

'np.column_stack((X ,Y))'? – Divakar

+0

不错,谢谢你。有没有办法让它成为一个元组?堆栈只是添加列。 Y可以是任意长度的列表,因为X,所以我需要保持它们分开... – bordeo

回答

3

这是级联的直线前进的情况下 - 除了y需要被调换:

In [246]: x = np.array([[1,2],[3,4]]) 
In [247]: y= np.array([[5,6]]) 
In [248]: np.concatenate((x,y.T),axis=1) 
Out[248]: 
array([[1, 2, 5], 
     [3, 4, 6]]) 

也就是说,以某种方式或其他y必须有尽可能多的行为xcolumn_stackhstack需要相同的转置。

numpy中,元组符号用于结构化数组记录。这需要定义一个化合物dtype。如果您勾勒出所需的dtype,我可以帮助您构建它。

您发表评论:

Y可以是任意长度的列表,如能X,所以我需要让他们分开..

这是否意味着可以有不同数量的项目在Y和X中,那些元组中的一些将完成?有一个x项,但不是y或v.v.?如果是这样的话,那么你会测试使用列表理解和zip工具之一(普通邮编或从itertools)。 numpy数组用于匹配大小的列表/数组。

拉链例子:

In [263]: x = [[1,2],[3,4]] 
In [264]: y= [5,6,7]   # not nested 

拉链超过最短的,忽略最长

In [266]: [(i,j) for i,j in zip(x,y)] 
Out[266]: [([1, 2], 5), ([3, 4], 6)] 

拉链在最长,垫最短

In [267]: [(i,j) for i,j in itertools.zip_longest(x,y)] 
Out[267]: [([1, 2], 5), ([3, 4], 6), (None, 7)] 
+0

明白了。谢谢。 (复合dtype是没有必要的......我想到我可以处理Y矩阵,并列出不同长度的列表 - 在我的距离计算和平均值期间,所有X值都变成了成单一值,只剩下Y) – bordeo