2015-11-16 25 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