如何替换 ndarray 中的第 n 个实例?

How do I replace every nth instance in an ndarray?

我有一个 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

这是行不通的。

使用np.where查找感兴趣项目的索引。找到每一个索引。更新项目:

locations = np.where(numbers == 57)[0]
numbers[locations[::n]] = 38