我正在將陣列的元素 1 到 n-1 的值與它們的兩個直接鄰居(左和右)進行比較。為了找出有多少元素比它們的兩個鄰居都小或大,我實作了一個從值 0 開始的計數器。
比較是通過“for”回圈中的簡單迭代來完成的。對于每次迭代 i,分配的計數器值 val[i] 應根據先前的計數器值 val[i-1] 計算。理論上,該值只能保持不變或增加 1。但是,在我的回圈中,計數器有時會重置為 0 或減去 1。
即使嘗試了很多事情,比如改變索引括號的數量,我也無法解決這個減法問題。誰能看到我的代碼有什么問題并告訴我如何解決這個問題?
正確的輸出應該是陣列 val = [ 0, 0, 1, 2, 2, 2, 2, 3, 4]
duv = np.array([24, 12, 0, 6, 3, 0, -3, -6, -3, -6])
val = []
val = np.append(val, 0)
print('start_val = ', val[0])
for i in range (1, 9):
if duv[[i-1]] > duv[[i]] and duv[[i 1]] > duv[[i]]:
new_val = val[[i-1]] 1
val = np.append(val, new_val)
if duv[[i-1]] < duv[[i]] and duv[[i 1]] > duv[[i]]:
new_val = val[[i-1]] 1
val = np.append(val, new_val)
else:
new_val = val[[i-1]]
val = np.append(val, new_val)
print(val)
uj5u.com熱心網友回復:
使用矢量代碼。
這里使用移位差的符號和 a cumsum:
duv = np.array([24, 12, 0, 6, 3, 0, -3, -6, -3, -6])
diff = np.sign(np.diff(duv))
diff1 = np.r_[0, diff]
diff2 = np.r_[-diff, 0]
out = np.cumsum(diff1 == diff2) #[:-1] # if the last element is unwanted
輸出:array([0, 0, 1, 2, 2, 2, 2, 3, 4, 4])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490971.html
