Scipy detrend не эквивалентен MATLAB - PullRequest
0 голосов
/ 13 июня 2018

У меня есть два файла с той же целью, один в Python и один в MATLAB.После прочтения файла данных я хочу, чтобы они вычислили ошибки и использовали detrend для удаления постоянного смещения, а затем интерполировали поверхность, чтобы соответствовать ошибкам, используя griddata.

При разыменовании данных в моем файле Python я пытался использовать scipy.signal.detrend с обоими типами аргументов linear и constant, поскольку constant изначально не работал.( См. для документации scipy.signal.detrend)

Однако ни один из этих методов не получает тот же массив err, что и файл MATLAB, и я гарантировал, что все остальное до этого момента имелосоответствует.Можете ли вы сказать мне другой способ убывания тренда, как это делает MATLAB?

Код Python (за исключением заголовка / импорта):

timestamp = datetime.datetime.today().strftime('%Y%m%d%H%M')
print timestamp
plt.rc('xtick', labelsize=5)
plt.rc('ytick', labelsize=5)
plt.rc('grid', ls='dotted')
plt.rcParams['lines.dotted_pattern'] = [0.1,0.5]
np.set_printoptions(suppress=True)

def main(argv):
    testdir = argv[0] # if list indexing error --> you must input a file name after <python es15302_squareness.py> in the command line
    fname = os.path.join(testdir,'OUTDATA.DAT')

    s = np.loadtxt(fname)    #If in current directory
    s2 = np.transpose([s[:,0],s[:,2]])      # these are 
    s3 = np.transpose([-s[:,1],s[:,3]])     # all going
    posEncUm = np.divide(s2,25000)          # to be
    posLasUm = np.divide(s3,25000)          # 169x2

    err = posEncUm - posLasUm;
 # -------------------------Everything good up to here----------------------    
    err[:,0] = scipy.signal.detrend(err[:,0], type=='constant')
    err[:,1] = scipy.signal.detrend(err[:,1], type=='constant')
    print err

Код Matlab:

function ES15302_squareness(myDir)

close all;
cd(myDir);


s = load('outdata.dat');


posEncUm = [s(:,1) s(:,3)]/25000;
posLasUm = [-s(:,2) s(:,4)]/25000;

err = posEncUm - posLasUm;

err(:,1) = detrend(err(:,1),'constant');
err(:,2) = detrend(err(:,2),'constant');

(У меня нет ошибок, просто ошибка в MATLAB не совпадает с ошибкой в ​​Python после отклонений)

1 Ответ

0 голосов
/ 13 июня 2018

Я не уверен, что существует другая функция scipy / matplotlib для решения этой проблемы, но в то же время, вычисляя среднее значение каждого столбца из файла MATLAB, среднее значение было достаточно близко к 0(в пределах 0,0001), что, я думаю, я просто возьму среднее значение столбцов в моем файле Python, а затем вычту это среднее значение из каждого индекса в столбце.

В будущем, тем не менее, я все равно буду любитьзнать метод, который не полагается на это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...