我有個1個維數據與被設置爲9999。在這裏沒有一些數據值來設置替換值是提取物,因爲它是相當長:的Python:在陣列
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
我想更換沒有數據值與兩邊最接近的數值的平均值,但是有些沒有數據值的數據值最接近也沒有數據值,取而代之的是有點難度。 即我希望將三個無數據值替換爲-2。我已經創建了一個循環來通過每個標量陣列和測試爲無數據:
for k in this_array:
if k == 9999:
temp = np.where(k == 9999, (abs(this_array[k-1]-this_array[k+1])/2), this_array[k])
else:
pass
this_array[k] = temp
但是我需要在添加如果功能或方式,採取前k-1個或後k處的值+1如果也等於9999例如:
if np.logical_or(k+1 == 9999, k-1 == 9999):
temp = np.where(k == 9999, (abs(this_array[k-2]-this_array[k+2])/2), this_array[k])
正如一看就知道,這個代碼就會變得混亂作爲一個可能最終採取了錯誤的值或嵌套IF函數加載結束了。 有沒有人知道一個更清晰的方法來實現這一點,因爲它在整個數據集中都非常可變?
根據要求:如果第一個和/或最後一個點沒有數據,他們最好用最近的數據點替換。
如果列表中的最後一個元素是'9999',該怎麼辦?你想用它取代什麼樣的價值? – Cameron
@Cameron道歉,如果最後一個元素是「9999」,那麼它可以被替換爲倒數第二個元素。謝謝。 – AJEnvMap