Как заменить каждый n-й экземпляр в ndarray? - PullRequest
1 голос
/ 30 мая 2020

У меня есть numpy массив atoms.numbers, который выглядит так:


array([27, 27, 27, 27, 27, 27, 57, 57, 57, 57, 57, 57, 57, 57, 27, 27,  8,
        8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
        8,  8,  8,  8,  8,  8, 27, 27, 27, 27, 27, 27, 57, 57, 57, 57, 57,
       57, 57, 57, 27, 27,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8])

Я могу заменить все те же экземпляры, например, все 57 в массиве, используя:

atoms.numbers[atoms.numbers==57]=38

, что дает:

array([27, 27, 27, 27, 27, 27, 38, 38, 38, 38, 38, 38, 38, 38, 27, 27,  8,
        8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
        8,  8,  8,  8,  8,  8, 27, 27, 27, 27, 27, 27, 38, 38, 38, 38, 38,
       38, 38, 38, 27, 27,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8])

Я хотел бы иметь возможность заменить каждый n-й экземпляр в массиве. Я пробовал:

n=5
atoms.numbers[atoms.numbers==57][::n]=38

Что не работает.

1 Ответ

1 голос
/ 30 мая 2020

Используйте np.where, чтобы найти индексы интересующих элементов. Найдите каждый n-й индекс. Обновите предметы:

locations = np.where(numbers == 57)[0]
numbers[locations[::n]] = 38
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...