Заменить значения в массиве 3d numpy - PullRequest
0 голосов
/ 08 мая 2019

Есть эти два массива:

a = np.array([
    [
        [1,2,3,0,0],
        [4,5,6,0,0],
        [7,8,9,0,0]
    ],
    [
        [1,3,5,0,0],
        [2,4,6,0,0],
        [1,1,1,0,0]
    ]
])

b = np.array([
    [
        [1,2],
        [2,3],
        [3,4]
    ],
    [
        [4,1],
        [5,2],
        [6,3]
    ]
])

с формами:

"a" shape: (2, 3, 5), "b" shape: (2, 3, 2)

Я хочу заменить последние два элемента из массива a на элементы из массива b, например

c = np.array([
    [
        [1,2,3,1,2],
        [4,5,6,2,3],
        [7,8,9,3,4]
    ],
    [
        [1,3,5,4,1],
        [2,4,6,5,2],
        [1,1,1,6,3]
    ]
])

Однако np.hstack((a[:,:,:-2], b)) выдает ошибку значения:

все размеры входного массива, кроме оси конкатенации, должны точно соответствует

и вообще не похоже, что это правильная функция для использования. Добавить также не работает.

Есть ли в numpy метод, который может это сделать, или мне нужно перебирать массивы с помощью цикла for и манипулировать ими вручную?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

без перезаписи метод:

  • a[:,:,-2:] извлекает нули в конце;используйте a[:,:,:3].

  • Согласно документации , np.hstack(x) эквивалентно np.concatenate(x, axis=1).Поскольку вы хотите объединить матрицы в их самых внутренних строках, вы должны использовать axis=2.

Код:

>>> np.concatenate((a[:,:,:3], b), axis=2)
array([[[1, 2, 3, 1, 2],
        [4, 5, 6, 2, 3],
        [7, 8, 9, 3, 4]],

       [[1, 3, 5, 4, 1],
        [2, 4, 6, 5, 2],
        [1, 1, 1, 6, 3]]])
1 голос
/ 08 мая 2019

Вы можете использовать прямые индексы так:

a[:, :, 3:] = b
...