Соединение двух каналов массива - PullRequest
0 голосов
/ 29 октября 2018

У меня есть два массива, например:

a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[11,12,13],[14,15,16],[17,18,19]]

Какие каналы одного изображения. Я хотел бы получить массив «подключенных» каналов как можно более питоническим способом. желаемый результат:

c = [[[1,11],[2,12],[3,13]],
    [[4,14],[5,15],[6,16]],
    [[7,17],[8,18],[9,19]]]

То, что я попробовал: Я создал массив одинакового размера и зациклил оба исходных массива, чтобы соединить их.

for x in range(len(a)):
    for y in range(len(a[x])):
        c[x][y] = [a[x][y],b[x][y]]

Что мне нужно: Я бы хотел найти более эффективный, модульный и питонный способ реализации этого.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это dstack. Вы упоминаете, что это изображение, и из документов:

Это простой способ объединения двухмерных массивов (изображений) в один трехмерный массив для обработки.

np.dstack((a, b))

array([[[ 1, 11],
        [ 2, 12],
        [ 3, 13]],

       [[ 4, 14],
        [ 5, 15],
        [ 6, 16]],

       [[ 7, 17],
        [ 8, 18],
        [ 9, 19]]])

Небольшое примечание: в документах также указывается, что concatenate и stack должны быть предпочтительными, поскольку они являются более общими.

0 голосов
/ 29 октября 2018

Вы можете использовать np.stack на второй оси:

>>> np.stack((a,b),axis=2)
array([[[ 1, 11],
        [ 2, 12],
        [ 3, 13]],

       [[ 4, 14],
        [ 5, 15],
        [ 6, 16]],

       [[ 7, 17],
        [ 8, 18],
        [ 9, 19]]])

Проверка того, что он совпадает с вашим c массивом:

c = np.array([[[1,11],[2,12],[3,13]],
              [[4,14],[5,15],[6,16]],
              [[7,17],[8,18],[9,19]]])

>>> (c == np.stack((a,b),axis=2)).all()
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...