Объедините массивы с определенной формой, используя NumPy - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь имитировать комбинацию массивов aa и bb, показанных ниже, используя zip() в блоке for:

import numpy as np

aa = np.random.uniform(0., 1., (3, 566))
bb = np.random.uniform(0., 1., (3, 566))

cc = []
for a, b in list(zip(list(zip(*aa)), list(zip(*bb)))):
    cc.append(list(zip(*[a, b])))
cc = np.array(cc)

print(cc.shape)
(566, 3, 2)

Я пробовал vstack, hstack, column_stack, все они в сочетании с .reshape() безрезультатно. Очевидно, что должна совпадать не только конечная форма, но и сам массив.

Каков правильный numpy способ сделать это?

1 Ответ

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

Вы можете транспонировать aa и bb, а затем использовать numpy.dstack ( массивы стеков вдоль третьей оси ), т.е. np.dstack([aa.T, bb.T]):

np.dstack([aa.T, bb.T]).shape
# (566, 3, 2)

(np.dstack([aa.T, bb.T]) == cc).all()
# True

Или используйте np.stack(..., axis=-1):

(np.stack([aa.T, bb.T], axis=-1) == cc).all()
# True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...