Здравствуй, дорогой читатель. В статье речь пойдет об обработке показаний с датчика с применением как простых алгоритмов, так и нейронной сети. Что проще – решай сам.
Во время бурения, в связи с низкой скоростью передачи данных, данные каротажа, условно говоря, неполные, и в случае ошибки передачи данных или сбоя прибора они правятся вручную. Впоследствии показания считываются с прибора. И зачастую этих данных, требующих обработки, десятки тысяч строк.
Первый способ обработки – с помощью Z-фактора, сглаживания гаусса:
import numpy as np
from scipy import stats
import lasio
from scipy import ndimage
las = lasio.read(r"Ваш лас.las")
def changeNan (mass):
nan_indices = np.isnan(mass);
non_nan_indices = np.arange(len(mass))[~nan_indices]
interpolated_values = np.interp(np.arange(len(mass)), non_nan_indices, mass[~nan_indices])
mass[nan_indices] = interpolated_values[nan_indices]
return mass
def lasApd (m):
m[m >= 1600] = np.NaN
m[m < 1] = np.NaN
k = 1
m = changeNan(m)
for i in range(1):
z = stats.zscore(m, ddof=0);
m[abs(z) > k ] = np.NaN
m = changeNan(m)
m = ndimage.gaussian_filter(m, np.nanmean(m)/3)
return m
arr = [“набор мнемоник для анализа”]
for i in arr:
las[i] = lasApd(las[i])
print(i)
with open(выход.las', mode='w') as f:
las.write(f, version=2.0)
Когда я это написал, узнал о «панде» и что можно сделать проще. Полночи ушло (смена у меня ночная).