У меня два массива 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:]))
Как вы можете видеть, я в основном собираю 50 значений каждый из данных_0 и data_3 многократно и объединяя их вместе, чтобы получить новый массив 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 здесь?
Поскольку 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_0
, data_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]
Это то, что мы хотим.
Внутренний список может быть составлен по усмотрению списка
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
(которая в этом случае объединяет списки в больший список)