Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: GregОтветов: 1

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

loopsmatlabnaming-conventions

Ответы

Ответ 1 · ha9u63ar

Поскольку вы хотели динамически называть интенсивность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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы