Добавление определенных элементов в массиве?

 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]])
Другие вопросы по тегам