簡體   English   中英

將數組中的連續相等數字設置為零

[英]Set consecutive equal numbers in an array equal to zero

我有一個像

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 

使用 output [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 

其中有 output [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)

output:

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

我將沒有最后一個元素的a與沒有第一個元素的a進行比較,因此我在可能被稱為前一個元素和當前元素的內容之間進行成對比較,這導致True s 和False s 的數組比a短 1 ,然后我使用它作為掩碼設置0其中是True 請注意,我只修改a after first 元素的一部分,因為 first 永遠不會改變。

試試 numpy xor

np.insert((np.logical_xor(a[:-1], a[1:]) * a[1:]), 0, a[0])
array([1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])

嘗試:

import numpy as np

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

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

print(a_desired)

Output:

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

怎么樣:

value_detected = 0
for i in range(len(a)):
    if value_detected:
        if a[i] == value_detected:
            a[i] = 0
        else:
            value_detected = a[i]
    else:
        if a[i]:
            value_detected = a[i]

print(a)

對於原始輸入,output:

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

進一步測試,如果輸入是:

a = [ 1, 1, 2, 2, 3, 3, 3, 1, 1, 1, 1, 0, 1]

那么 output 是:

[1, 0, 2, 0, 3, 0, 0, 1, 0, 0, 0, 0, 1]

創建一個包含一個元素的列表,該元素將是輸入列表的第一個元素。

現在,只需從第二個元素開始遍歷您的列表並檢查它是否等於前一個值。

如果是 append 0 否則,append 的值。

input_arr = [ 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1]
output_arr = [input_arr[0]]
for i in range(1, len(input_arr)):
  if input_arr[i]==input_arr[i-1]:
    output_arr.append(0)
  else:
    output_arr.append(input_arr[i])


print (output_arr)

從我這里,首先我復制原始數組,然后制作新的所需數組,如下所示:

new_a = a.copy()
for i in range(1, len(a)):        
    if a[i] == a[i-1]: new_a[i] = 0
print(new_a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM