Как найти и заменить указанные c элементы в массиве numpy? - PullRequest
1 голос
/ 03 февраля 2020

У меня есть массив numpy: a = [[1, 999, 3], [-1, 1, 3], [2, 999, 6]]

Я хочу найти каждый экземпляр числа 999 и заменить его на среднее значение двух соседние числа ( 999 всегда в середине).

Я использовал следующий код, чтобы попытаться сделать это: np.where(a == 999, .5 * (a[0] + a[2]), a)

Но вывод, который я получаю, добавляется значение, которое я вычисляю для первого массива: [[1, 2, 3], [-1, 1, 3], [2, 2, 6]] вместо: [[1, 2, 3], [-1, 1, 3], [2, 4, 6]]

Как это исправить?

1 Ответ

4 голосов
/ 03 февраля 2020

Вы можете получить индексы строк, где второй столбец равен 999, и заменить средним значением соответствующих первого и третьего столбцов. Я использую np.ix_ здесь, чтобы избежать целочисленной индексации, вместо этого будет создан me sh из входных последовательностей:

a = np.array([[1, 999, 3], [-1, 1, 3], [2, 999, 6]])

ix = a[:,1] == 999
a[ix, 1] = a[np.ix_(ix, [0,2])].mean(1)

print(a)

array([[ 1,  2,  3],
       [-1,  1,  3],
       [ 2,  4,  6]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...