python - 查找元素改变值的索引 numpy

标签 python numpy indexing unique

假设我有

>>> v
array([1, 1, 1, 1, 1, 2, 2, 2, 3, 4, 3, 4, 3, 4, 3, 4, 5, 5, 5])

是否有一种有效的 numpy 方法来查找值发生变化的每个索引?例如,我想要一些结果,例如,

>>> index_of_changed_values(v)
[0, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16]

如果某些 numpy 例程无法做到这一点,那么在 python 中有什么快速的方法可以做到这一点?因为我是一个 numpy 初学者,所以引用一些好的 numpy 教程对我来说也很有用。

最佳答案

您可以通过将每个元素与其邻居进行比较来在 numpy 中获得此功能;

v[:-1] != v[1:]


array([False, False, False, False,  True, False, False,  True,  True,
    True,  True,  True,  True,  True,  True,  True, False, False], dtype=bool)

要获取索引,请使用“where”函数

np.where(v[:-1] != v[1:])[0]

array([ 4,  7,  8,  9, 10, 11, 12, 13, 14, 15])

从这里,您可以在第一个元素前面添加一个元素,以获得与问题中相同的索引方案。

关于python - 查找元素改变值的索引 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19125661/

相关文章:

python - 每次迭代只产生一次

python - 删除序列中重复的项目集

python - 无效类型比较错误

python - 向量化这个 for 循环以更快地比较所有可能的组合

performance - 如何在 Heroku 上重置 pg_stat_user_tables? (pg_stat_reset() 需要 super 用户)

sql - 有哪些不同类型的索引,每种索引的优点是什么?

python - cython 包装 cpp 结构和函数,参数为结构数组

python - 您如何找到字典中出现次数最多的值?

python - MySQL Encoding 4 byte in 3 byte utf-8 - 不正确的字符串值

python:根据原始索引添加列表元素(同时更新列表)