2016-06-27 2 views
0

Я довольно новичок программист в Октаве и все еще пытаюсь выяснить, как обрабатывать структуры данных. Я пытаюсь использовать acovf из tsa пакета с этим кодом, получаю следующее сообщение об ошибке:Октавская помощь: tsa parcor and array handling

>> pkg load tsa 
>> parcorr = parcor(acovf(data,5)); 
>> parcorr 
parcorr = [](250x0) 

Может кто-нибудь объяснить, что это значит? Если я пытаюсь получить доступ к отдельным элементам в результате я получаю следующее:

>> parcorr(2:5) 
error: A(I): index out of bounds; value 5 out of bound 0 

Не должна ли она просто дать мне первые 4 автокорреляции более высокого порядка в данных? Может кто-нибудь объяснить, что происходит?

ответ

0

Сообщение об ошибке просто означает, что вы пытаетесь получить доступ к массиву в том месте, которое у него отсутствует (например, позиция 2/3 в массиве 2/2 или в любой позиции в пустом массиве). Скорее всего, data - это не то, что вы хотели бы перед тем, как передать его acovf (посмотрите на numel(data) или size(data), чтобы узнать, есть ли это то, что вы ожидаете - может быть, вы просто испортили его, и оно пустое или похожее).

Вот рабочий минимальный пример (сравните ваши к нему):

pkg load tsa 

# with 1D data 
data = sin(0:0.1:100); 
numel(data) 
parcorr = parcor(acovf(data,5));    
plot(parcorr); 

# with 2D data 
data2 = [sin(0:0.1:100);cos(0:0.1:100)]; 
size(data2) 
parcorr = parcor(acovf(data2,5));    
plot(parcorr'); 
+0

Вы не должны рекомендовать использование 'length', потому что оно имеет нечетное определение, длину самого длинного измерения. Вместо этого следует использовать 'numel'. – carandraug

+0

Верно, я обновил ответ. Thx для этого! – geekoverdose

0

Спасибо большое за вашу помощь. Думаю, я разобрался в этом вопросе. Ovtave искал вектор строки, тогда как я кормил acovf и parcor вектор-столбец. Как только я изменил его на данные, он сработал. Это действительно странно, что Октав настолько ориентирован на ориентацию векторов.