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!