我有一个像这样的数组
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
进行比较,因此我在所谓的前一个元素之间进行成对比较和 当前 元素,这会产生由 True
和 False
组成的数组,比 a
短 1,然后我用它作为掩码来设置0
,其中True
。请注意,我只修改第一个元素之后的 a
部分,因为第一个元素永远不会改变。
关于python - 将数组中连续相等的数字设置为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66365696/