2013-02-12 4 views
-3

Я задал аналогичный вопрос, но ответы были сосредоточены на индексации на 0, о которых я только что упомянул в контексте вопроса. Здесь я изменяю вопрос и не хочу нулевого индексации, особенно после того, как я понял, что он может быть сложным в matlab.Matlab - переменные индексирования

Мой вопрос ...

Я пытаюсь сделать for-loop в matlab, который будет возвращен следующий:

C_1 = 0 
C_2 = 0 
C_3 = 0 
C_4 = 0 
C_5 = 0 

Я дал ему попробовать следующее, но не получилось:

function test 
for i=1:5 
     C{i} = 0 
    end 
end 

EDIT

Это результат, который я получаю (почему это так)?

C = 

    [0] 


C = 

    [0] [0] 


C = 

    [0] [0] [0] 


C = 

    [0] [0] [0] [0] 


C = 

    [0] [0] [0] [0] [0] 

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

Спасибо.

+0

Возможный дубликат [Изменение имени переменной в цикле] (http://stackoverflow.com/questions/14416582/changing-variable-name-in-loop) – Shai

+0

вам нужен массив или ячейка? Причина из вашего примера выглядит как ячейка. – fpe

+0

Удалили ли вы предыдущий вопрос? Почему вы делаете повторяющиеся вопросы вместо улучшения существующих? это поведение спам SO. – Shai

ответ

0

Из вашего примера, это выглядит, как вы хотите это:

[C{1:5,1}] = deal(zeros(1,1)); 

если, вместо этого вы хотите массив, введите в

C = zeros(5,1); 
0

Причина вы получите то, что вы видите, что в петля

for i=1:5 
    C{i} = 0 
end 

Вы не завершаете утверждение точкой с запятой. Что происходит в этом случае:

Первый раз через петлю массив клеток C инициализируется одним элементом 0 в позиции 1. Результат выводится, потому что нет оконечной точки с запятой:

C = 

    [0] 

Это показывает, С представляет собой массив ячеек с одним элементом - массив [0] (все в Matlab представляет собой массив, даже скаляр).

После второго прохода через петлю for, C представляет собой две-ячейку, массив, и отображается его содержимое:

C = 

    [0] [0] 

т.д.

Если вы хотите точный вывод, который вы описываете ,

C_1 = 0 C_2 = 0 C_3 = 0 C_4 = 0 C_5 = 0

Вы бы хотели создать пять переменных, имя которых сгенерировано программно.Функция, которую вы можете использовать для этого assignin, чей синтаксис assignin(workspace, varname, value)

Следующая петля делает именно то, что вы просите

clear all 
for ii=1:5 
    assignin('base', sprintf('C_%d', ii), 0); 
end 
clear ii 

whos 

Это покажет, как вы создали пять переменных, C_1 через C_5, со значениями установить на ноль.

Должно быть очевидно, как изменить этот код на нечто менее тривиальное.

В целом вы хотели бы использовать «обычные» массивы везде, где это возможно, из-за преимущества скорости и массивов ячеек, когда отдельные элементы различны - разные типы, размеры и т. Д. Хорошим использованием массива ячеек является для этикеток:

myLabels={'this', 'that', 'label'}; 

Как правило, если вам нужен массив из пяти значений, которые все равны нулю, то правый синтаксис почти всегда

myArray = zeros(1, 5); 

Примечание - в Matlab, если вы напишете zeros(5) это создаст квадратная матрица 5x5. В некоторых других пакетах, таких как FreeMat, создается матрица 1x5 ...

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