Как обновить все значения массива numpy, используя значения из другого массива - PullRequest
0 голосов
/ 16 декабря 2018

* Вопрос отредактирован / обновлен для добавления примера

Привет всем!У меня есть a np.array.Исходя из его эталонных значений, я хочу обновить массив b, который является моей матрицей.«1-й столбец» a представляет код, а «2-й столбец» - это мое контрольное значение.Матрица заполнена кодами, и я должен заменить их.См. Ниже пример.

import numpy as np
a = np.asarray([[0, 11], [1, 22], [2, 33]])
b = np.asarray([[0, 14, 12, 2], [1, 1, 7, 0], [0, 0,3,5], [1, 2, 2, 6]])

Другими словами: я хочу заменить значения 0, 1, 2 в «b» на 11, 22, 33 соответственно.

лучший способ сделать это, учитывая, что мой реальный массив a имеет + - 50 кодов, а мои реальные b матрицы имеют форму (850,850).

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Если коды не слишком длинные целые числа, вам просто нужно построить правильную таблицу поиска:

lut = np.arange(b.max()+1)
k,v = a.T
lut[k] = v

Для:

>>> b
[[ 0 14 12  2]
 [ 1  1  7  0]
 [ 0  0  3  5]
 [ 1  2  2  6]]

>>> lut[b]
[[11 14 12 33]
 [22 22  7 11]
 [11 11  3  5]
 [22 33 33  6]]

неопределенные коды отображаются на себя, code=value.

0 голосов
/ 16 декабря 2018

Если я правильно понимаю вопрос, этот пример должен показать, что вы просите?

Предполагается, что a - это матрица, как вы перечислили выше, а b - это список, в который вы хотите записать

import numpy as np
a = np.asarray([[0, 10], [2, 30], [1, 40]])
b = np.zeros(3)
b[a[:, 0]] = a[:, 1]

, где [:, 0] - это индекс дляизменить, и [:, 1] - это то, что нужно заполнить

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