Ho un 1 dati dimensionali stabiliti con alcuni senza valori di dati che sono impostati come 9999. Ecco un estratto in quanto è piuttosto lungo:Python: Sostituzione di valori in una matrice
this_array = [ 4, 4, 1, 9999, 9999, 9999, -5, -4, ... ]
vorrei sostituire i valori senza dati con la media dei valori più vicini su entrambi i lati, tuttavia, poiché alcuni valori di nessun dato hanno valori più vicini come nessun valore di dati, sostituirli è un po 'più difficile. Ad esempio, vorrei che i tre valori senza dati fossero sostituiti con -2. Ho creato un ciclo per passare attraverso ciascuno dei scalari nella matrice e test senza dati:
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
Tuttavia devo aggiungere in se funzione o un modo per prendere il valore prima k-1 o dopo k +1 se questo è anche uguale a 9999 es:
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])
come si può dire, questo codice diventa disordinato come si può finire per prendere il valore errato o finire con un sacco di funzioni sE nidificate. Qualcuno sa di un modo più pulito per implementare questo dato che è piuttosto variabile in tutto il set di dati?
Come richiesto: Se il primo e/o l'ultimo punto non sono dati, preferibilmente saranno sostituiti con il punto dati più vicino.
Cosa succede se l'ultimo elemento nell'elenco è '9999'? Con che valore vuoi sostituirlo? – Cameron
@Cameron Scuse, se l'ultimo elemento è '9999', allora può essere sostituito con il penultimo elemento. Grazie. – AJEnvMap