我需要将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。
有更好的方法吗?
答案 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
的大小。