2015-11-03 72 views
0

我需要將2個numpy陣列(相同長度)組合成一個大陣列,然後將陣列解耦到原始。我知道如何組合陣列,但不知道如何去耦合它。最有效的方法來組合和分離numpy陣列

因此,結合陣列

x=np.random.randint(5, size=(100000, 3)) 
y=np.random.randint(5, size=(100000, 1)) 
a=np.hstack((x,y)) 

現在,我不知道如何重新取得x和y。我曾嘗試過

(_x,_y)=a.shape 
_x=-_x 
nx=a[:,0] 
ny=a[:,_x:,] 

無論出於何種原因,我沒有得到我的正確答案,x和y。

有沒有更好的方法來做到這一點?

+0

它看起來像['numpy.hsplit'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.hsplit.html#numpy.hsplit)是'numpy.hstack ' –

回答

2

x.shape(100000, 3)y.shape(100000, 1)np.hstack連接第二個(列)維的數組,所以a.shape == (100000, 4)。這意味着x對應於a的前3列,並且y對應於最後一列。

你可以使用slice indexing他們分開,就像這樣:

x1 = a[:, :3] # the first 3 columns of a 
y1 = a[:, 3:] # the remaining column of a 

你是什麼可能混淆了,當你與一個整數值您1.減少返回數組的維數。例如,你可能預計a[:, 3]a的第四列,因爲Python索引從0開始)與y相同,但相反它是(100000,) 1D陣列而不是像y這樣的(100000, 1) 2D陣列。

爲了避免這種情況,你既可以使用片索引就像在我上面的例子,也可以使用np.newaxis插入大小爲1的一個新的層面:通過在輸出調用reshape

y2 = a[:, 3, np.newaxis] 

或:

y2 = a[:, 3].reshape(-1, 1) 

-1自動擴展此尺寸以匹配a的尺寸。