Динамически изменять имя переменной внутри цикла в MATLAB

Этот сценарий используется для обработки изображений путем умножения набора из 2000 изображений на маску и последующего суммирования значений в каждом кадре. Эти значения вводятся в вектор-строку под названием Intensity.

Я пытаюсь получить 20 векторов-строк с именами интенсивности1, intesity2...intensity20, есть ли прямой способ изменить имя вектора-строки интенсивности при каждой итерации цикла?

for m=1:20   

 mask=bigrating(m,m,0);

        for n=1:2000  
            I=sum(sum(imread((sprintf('image%05d.tif',n))).*(mask)));
            Intensity(n)=I;
        end

save('filepath','Intensity')

end

person Greg    schedule 13.11.2014    source источник
comment
Я немного запутался, вы хотите записать каждый из векторов интенсивности в другое имя файла, например интенсивность1, интенсивность2, .... интенсивность20? Не могли бы вы уточнить, что вы подразумеваете под изменением имени вектора-строки интенсивности. Или вы хотите динамически создавать интенсивность1, интенсивность2 и т. д. вместо выполнения Intensity(n) в цикле for?   -  person ha9u63ar    schedule 13.11.2014
comment
Я хотел бы сохранить векторы интенсивности как интенсивность1, интенсивность2 и т. д. Имя файла каждый раз увеличивается на 1, и я хотел бы, чтобы имя переменных, сохраненных в файлах, также увеличивалось каждый раз.   -  person Greg    schedule 13.11.2014
comment
Я обновил свой ответ после вашей команды @Mark   -  person ha9u63ar    schedule 13.11.2014
comment
Что не так с двумерным массивом? Intensity(m,n) = I;   -  person Peter    schedule 13.11.2014
comment
Вам нужно иметь разные имена переменных? Это неуклюже и медленно. Предварительно выделите 2D-массив и обновите его, как предлагает @Peter.   -  person Cape Code    schedule 13.11.2014


Ответы (1)


Поскольку вы хотели динамически называть интенсивность1, интенсивность2, .... интенсивность20 и т. д., для вас должно работать следующее:

for m = 1:20
    mask = bigrating(m,m,0)
    for n = 1:2000
        I=sum(sum(imread((sprintf('image%05d.tif',n))).*(mask)));
        eval(['intensity' num2str(m) ' = I'])
    end
    save('filepath', ['intensity' num2str(m)])
end
person ha9u63ar    schedule 13.11.2014
comment
Использование eval обычно не рекомендуется, и его следует избегать, если нет другого решения. Здесь 2D-массив, предложенный @Peter, является гораздо лучшим решением проблемы. - person am304; 14.11.2014
comment
@ am304 Согласен, но если ему нужно выполнить быстрое моделирование / расчет, ему это сойдет с рук. - person ha9u63ar; 14.11.2014
comment
Я просто немного опасаюсь учить людей, особенно новых пользователей, плохим вещам, потому что, сделав это один раз, они будут продолжать делать это, а не делать это должным образом. Как однажды сказал Мастер Йода: «Если однажды ты вступишь на темный путь, он навсегда будет доминировать над твоей судьбой, поглотит тебя, как это было с учеником Оби-Вана». - person am304; 14.11.2014