Перебирая 2 numpy массива и объединяя их - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два массива 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 значений каждое из data_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 здесь?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Внутренний список может быть составлен из списка

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 голосов
/ 28 августа 2018

Поскольку 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]

Что мы и хотим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...