Добавление определенных элементов в массиве?
y = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
indices_of_y = np.array([12, 0, 6, 3, 4, 9, 11, 2])
z = np.array([1 , 1, 0, 1, 1, 1, 0, 0])
x = np.array([1, 1, 1, 0, 1, 0, 0, 1])
n = 3
Я хочу сравнить массивы z и x по элементам, и я хочу добавить n только к тем элементам y, где элементы z и x различаются. В случае, когда элементы z и x различны, я добавляю n к элементу y в позиции индекса, указанной в indices_of_y.
Ответ должен быть:
y = [1, 2, 6, 7, 5, 6, 10, 8, 9, 13, 11, 12, 13, 14, 15, 16]
1 ответ
Решение
Для проверки на поэлементное равенство вы делаете
z != x # array([False, False, True, True, False, True, False, True], dtype=bool)
результат, который вы можете использовать для извлечения индексов, которые вы хотите использовать
indices_of_y[z != x] # array([6, 3, 9, 2])
который в свою очередь вы используете в качестве индекса y
, Но с тех пор y
2D и ваш индекс 1D, нам нужно временно сплющить y
первое использование
y.ravel() # array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
поскольку y.ravel()
возвращает представление вместо копии, мы можем напрямую манипулировать всеми элементами и увидим изменение в y
, тоже. Таким образом, вы объединяете три в
y.ravel()[indices_of_y[z != x]] += n
и увидим результат
print(y)
# array([[ 1, 2, 6, 7],
# [ 5, 6, 10, 8],
# [ 9, 13, 11, 12],
# [13, 14, 15, 16]])