2015-11-03 70 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的尺寸。