2014-10-08 10 views
0

Я хочу сохранить массив, который меняет свой размер на каждой итерации цикла for. Например,Как хранить массивы переменной длины?

for y=1:100 
    for x=1:50 
. 
. 
     ms(:,x,y) = ans; 
. 
. 
    end 
end 

«ANS» представляет собой вектор-строка, которая меняет свой размер в каждой итерации у.

Как сохранить эту переменную длину «ans» в ms?

Когда я пытаюсь инициализировать 'ms' как ячейку, появляется сообщение об ошибке «Преобразование в ячейку из double невозможно».

Какими способами я могу это решить?

Благодаря Сердечные приветы

+1

Используйте массивы ячеек, то есть '{}' вместо '()' – Dan

ответ

1

Один из способов сделать это:

ms = {}; 
for y=1:100 
    for x=1:50 
     ms = [ms 1:x]; 
     % or 
     % ms = [ms new_cell_element]; 
    end 
end 

Вы можете также индексировать массив ячеек с ms{x,y} = 1:3; new_cell_element делает не должны быть клетки, это может быть что угодно вы хотите.

ms = [ms, 'A string', (1:5).'] %// Works! 

Обратите внимание, что я не рекомендую это, и я уверен, что есть и другие способы сделать это, в зависимости от того, что вы хотите сделать внутри этих вложенных циклов. Вы должны проверить cellfun и прочитать в cells в целом.

ans как имя переменной в MATLAB. Это только вызовет у вас проблемы. Любое другое имя лучше (except clear and builtin).

+0

ahahahaa, около 30 секунд друг от друга. Это смешно :) – rayryeng

+0

Hah! Вы были _waaay_, чтобы замедлить @rayryeng! Я бы дал вам +1, но, видя, что у вас есть имя ans как имя переменной, я просто не могу это сделать = P –

1

Единственный способ, которым я могу думать, это действительно использовать массив ячеек. Инициализировать массив 2D ячейки следующим образом:

ms = cell(50,100); 

После, вы индекс в клетку с помощью фигурных скобок ({}). Таким образом, ваш цикл будет выглядеть следующим образом:

for y=1:100 
    for x=1:50 
. 
. 
     ms{x,y} = ans; 
. 
. 
    end 
end 

После того как вы закончите, вы можете индекс в массиве ячеек, выбирая строки и столбца местоположения вы хотите:

vec = ms{row,col}; 

Кстати, я не» Рекомендуем использовать в качестве переменной ans. ans - это переменная по умолчанию, которая используется при выполнении инструкции в MATLAB, которая имеет выход, и вы не указываете переменную того, где будет выводиться этот выход из функции. У вас может быть код, который будет перезаписывать переменную ans, поэтому вы должны использовать другое имя.

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

  • Нет связанных вопросов^_^