Matlab: цикл по массиву ячеек для объединения строк

Мне нужно импортировать файл Degree210B49_015.dat а также Degree210B50_005.datИтак, я делаю это с массивом клеток, как это

column_file_number = {'49_015' '50_005'};
for i = column_file_number 
  Name_file= strcat('Degree210B', i, '.dat'); 
  Name_file
  data(:,end+1)=importdata(Name_file); 
end  

Однако значение, возвращаемое Name_file является 'Degree210B49_015.dat', Есть цитаты. И из-за этого я не могу импортировать данные.

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

1 ответ

Решение

Чтобы понять проблему здесь, вам нужно понять, как работают клеточные массивы и как for петли работают. for Цикл в примере работает примерно так же, как показано ниже:

for index = 1:numel(column_file_number)
    i = column_file_number(index);

Существует два способа доступа к записям массива ячеек:

1) фигурные скобки: column_file_number{index} даст вам элемент в месте, указанном index, Если index вектор, содержащий несколько индексов column_file_number{index} вернет список записей через запятую index в массиве ячеек. Для извлечения элементов сделайте что-то вроде [v1,v2] = column_file_number{[1,2]},

2) круглые скобки: column_file_number(index) даст вам массив ячеек, содержащий элементы column_file_number по индексам, указанным index - даже если index содержит только один элемент!

В примере for Цикл использует метод 2 - то есть переменная Name_file, которую вы получаете, представляет собой массив ячеек одного элемента вместо элемента char. Таким образом, чтобы решить проблему, вы можете изменить строку 5 на data(:,end+1)=importdata(Name_file{1}); или измените строку 3 на Name_file= ['Degree210B', i{1}, '.dat'];,

Проблема очень простая, но я думаю, что она довольно распространенная (я помню, что у меня была такая же проблема, когда я впервые выучил matlab), и понимание, почему проблема возникает и как ее решить, важно, чтобы свободно владеть matlab!

Другие вопросы по тегам