Перебирая 2 numpy массива и объединяя их

1

У меня два массива 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 здесь?

Теги:
arrays
numpy
for-loop

2 ответа

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_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]

Это то, что мы хотим.

  • 0
    Большое спасибо, высоко ценится
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 (которая в этом случае объединяет списки в больший список)

  • 0
    Большое спасибо, высоко ценится

Ещё вопросы

Сообщество Overcoder
Наверх
Меню