最有效的方法来组合和分离numpy数组

时间:2015-11-03 22:19:13

标签: python numpy

我需要将2个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。

有更好的方法吗?

1 个答案:

答案 0 :(得分: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数组而不是像(100000, 1)这样的y 2D数组。

要避免这种情况,您可以使用上面示例中的切片索引,也可以使用np.newaxis插入大小为1的新维度:

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

或在输出上调用reshape

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

-1会自动扩展此维度以匹配a的大小。