python - 将数组中连续相等的数字设置为零

标签 python arrays for-loop if-statement

我有一个像这样的数组

a = np.array( [ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1] )

并且正在寻找一种将连续相等元素设置为零的方法:

a_desired =  np.array( [ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1] )

到目前为止,我经历了一段非常不成功的时期,我尝试过一些简单的事情

for i in range(len(a)-1):
    if a[i+1] == a[i]:
        a[i+1] = 0 

输出[1 0 1 0 0 0 0 1 0 1 0 0 1],以及添加更多条件,例如

for i in range(len(a)-1):
    if a[i+1] == a[i]:
        a[i+1] = 0 
    if a[i+1] != a[i] and a[i] == 0 and a[i+1] != a[i]:
        a[i+1] = 0 

它有输出[1 0 0 0 0 0 0 0 0 0 0 0 0],但我似乎无法成功捕获完成这项工作所需的所有条件。

一些帮助将不胜感激!

最佳答案

我会按照以下方式进行:

import numpy as np
a = np.array([1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1])
a[1:][a[:-1]==a[1:]] = 0
print(a)

输出:

[1 0 0 0 0 0 0 1 0 0 0 0 1]

我将不带最后一个元素的 a 与不带第一个元素的 a 进行比较,因此我在所谓的前一个元素之间进行成对比较和 当前 元素,这会产生由 TrueFalse 组成的数组,比 a 短 1,然后我用它作为掩码来设置0,其中True。请注意,我只修改第一个元素之后的 a 部分,因为第一个元素永远不会改变。

关于python - 将数组中连续相等的数字设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66365696/

相关文章:

返回数组上的 Javascript 垃圾收集

ios - swift 3 将 json 数组解析为键值

python - 类型错误 : 'list' object is not callable in python

java - 尝试对对象数组进行排序时出现 NullPointerException

python - 对列进行排序,使一列位于另一列的值之后

JavaScript 多维数组检查

python - 在最后一次迭代的 for 循环之外打印一些内容

python - 在python中创建一个跨特定范围集的for循环函数

Python JIRA 非必填字段在创建问题上被强制

python - SQLAlchemy 事务与 session 的正确顺序是什么?