Заменить значения из массива (m, n, 3) условиями из массива (m, n, 1) - PullRequest
0 голосов
/ 15 апреля 2019

Допустим, у меня есть следующий массив:

a = np.random.randint(5, size=(2000, 2000, 1))
a = np.repeat(a, 3, axis=2) # Using this method to have a (m,n,3) array with the same values

и следующие массивы:

val_old = np.array([[0,  0,   0],  [3,  3,  3]])
val_new = np.array([[12, 125, 13], [78, 78, 0]])

Что я хочу сделать, это заменить значения из массива aсо значениями, указанными в массиве val_new.Итак, все [0,0,0] массивы станут [12,125,13], а все [3,3,3] станут [78, 78, 0].

Я не могу найти эффективный способ сделать это ... Я попытался адаптировать это решение , но оно только для 1-d массивов ...

Кто-нибудь знает быстрый способ / метод замены этих значений?

1 Ответ

1 голос
/ 15 апреля 2019

Если у вас есть «map» для каждого целого числа, вы можете использовать индекс (2000, 2000) для массива (5,) для широковещательной передачи в массив (2000, 2000, 5). Пример:

val_new = np.array([[12, 125, 13], [0,0,0], [1,3,3], [78, 78, 0]])  #0, 1, 2, 3
a = np.random.randint(4,size=(4,5))

val_new[a]  # (4,5,3) shaped array

>>array([[[  0,   0,   0],
    [ 78,  78,   0],
    [ 78,  78,   0],
    [ 12, 125,  13],
    [  0,   0,   0]],
....
   [[ 12, 125,  13],
    [ 12, 125,  13],
    [  0,   0,   0],
    [ 12, 125,  13],
    [  0,   0,   0]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...