Добавление элементов массива numpy в новый массив только при соблюдении условий

avatar
Dan C
8 апреля 2018 в 01:42
1276
1
1

Мне нужно скопировать элементы из одного массива numpy в другой, но только если выполняется условие. Скажем, у меня есть два массива:

x = ([1,2,3,4,5,6,7,8,9])
y = ([])

Я хочу сложить числа от x до y, но только если они соответствуют условию, скажем, проверить, делятся ли они на два. Я знаю, что могу сделать следующее:

y = x%2 == 0

, что делает y массивом значений «истина» и «ложь». Однако это не то, чего я пытаюсь достичь, мне нужны фактические значения (0,2,4,6,8) и только те, которые оцениваются как истинные.

Источник

Ответы (1)

avatar
sacuL
8 апреля 2018 в 01:45
2

Вы можете получить нужные значения следующим образом:

import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])

y = x[x%2==0]
# y is now: array([2, 4, 6, 8])

И вы можете суммировать их следующим образом:

np.sum(x[x%2==0])
# 20

Объяснение: Как вы заметили, x%2==0 дает логический массив array([False, True, False, True, False, True, False, True, False], dtype=bool). Вы можете использовать это как «маску» в исходном массиве, проиндексировав его с помощью x[x%2==0], возвращая значения x, где ваша «маска» равна True. Подробнее см. numpy документацию по индексированию.