2016-03-23 3 views
1

Я пытаюсь разбивать массив размером 1x117031 (массив X) на массив размером Nx140 (массив Y), поэтому я могу построить новый массив и узнать, как графики были изменены во время циклического тесты (N около 1000).Разбить массив

Вот мой код:

mydata=xlsread('average_4_5'); 

for i=100:size(mydata) 
    X(i-99)=mydata(i,10); 
end 

for j=1:1000 
    Y(j, 1:140)=X(1,((140*j)-140):140*j); 
end 

Но я получаю сообщение об ошибке:

Subscript indices must either be real positive integers or logicals.

Кажется, проблема исходит от X(1,((140*j)-140):140*j) и я не имею ни малейшего представления, почему это Безразлично» t распознает j как целочисленное значение.

Любые мысли о том, как я могу сделать это преобразование и построить строки Y, чтобы дать мне график с 1000 записей?

+2

Я не уверен, что следил за тем, что вы хотели сделать, но похоже, что вы, вероятно, можете сбросить все свои петли и просто использовать ['reshape'] (http://www.mathworks.com/help/matlab /ref/reshape.html). – Dan

+1

@ Dan Спасибо за ваш комментарий. Точно, я заменил мою теперь функцией изменения, и она работает. Спасибо, что напомнили мне об этом. – Kamran

+0

Лучше [не использовать 'i' и' j' как имена переменных в Matlab] (http://stackoverflow.com/q/14790740/1714410). – Shai

ответ

3

((140*j)-140) является 0 когда j есть 1. Проблема не в том, что j не является целым числом, но вы не можете индексировать матрицу с 0. Таким образом, ключевое слово здесь не integer but positive.

Однако встроенная функция reshape должна решить эту проблему.

Смежные вопросы