遍历2个numpy数组并将其串联

时间:2018-08-28 16:59:44

标签: python arrays numpy for-loop

我有两个numpy数组

data_0.shape =(500,52)和

data_3.shape =(480,52)

我试图通过以特殊方式将上述两个数组串联起来创建一个新数组。到目前为止,我一直是这样手动进行的。

data_train = np.concatenate((data_0[:50],data_3[:50],data_0[50:100],data_3[50:100],data_0[100:150],data_3[100:150],
                        data_0[150:200],data_3[150:200],data_0[200:250],data_3[200:250],data_0[250:300],data_3[250:300],
                        data_0[300:350],data_3[300:350],data_0[350:400],data_3[350:400],data_0[400:450],data_3[400:450],
                        data_0[450:],data_3[450:]))

如您所见,我基本上是重复从data_0和data_3分别获取50个值,并将它们连接在一起以获得新的数组data_train,其形状如下。

data_train.shape =(980,​​52)

此过程非常耗时,我正在尝试使此任务自动化。这就是我的代码的样子,但是我对如何同时遍历这两个数组以及如何通过交替地从两个数组中分别获取50个值来将它们连接起来感到困惑?

j = 0
k = 10
data_train = []

   data_train.append(np.concatenate((data_0[j:k],data_3[j:k])))
   j = j+10
   k = k+10
   data_train = np.array(data_train)

如何在此处启动for循环?

2 个答案:

答案 0 :(得分:0)

由于np.concatenate采用任何顺序,因此我们可以传递列表理解:

np.concatenate([arr[i:i+50] for i in range(0, 500, 50) for arr in (data_0, data_3)])

用英语说,对于起始索引i,它从0开始,以50的步长到达500(不包括索引,所以结尾在450处)和一个数组:data_0data_3,将切片从该起始索引移至该索引+50

它会产生以下内容:

data_0[0:50]
data_3[0:50]
data_0[50:100]
data_3[50:100]
...
data_0[450:500]
data_3[450:500]

我们想要的是什么。

答案 1 :(得分:0)

内部列表可以通过列表理解来构建

collection = sum([data0[50*i: 50*(i+1)], data3[50*i: 50*(i+1)]] for i in range(int(len(train_data)//50)), start=[]]

这将创建成对的[data0, data3]切片,并使用sum函数(在这种情况下,将列表连接成更大的列表)来列出它们。