Подподготовленное измерение назначения не сочетается в индексации петли, используя Предварительно ассигнованную Матрицу NaN

Я работаю с метеорологическим набором данных и потребностью извлечь одну колонку из многих файлов CSV и собрать результаты в новый файл. У меня есть он работающий в течение одного месяца, но сценарий застревает, когда это сталкивается с более коротким месяцем (Подподготовленное измерение назначения несоответствие). Имеет смысл, однако, я хочу, чтобы он просто держал ценности NaN, которые первоначально присутствуют в матрице заполнителя D.

Вот проблемная часть сценария,

%Convert dates to matlab date numbers and get number of rows
Date = datenum(Date{1, 1}, 'dd-mm-yyyy');
T = size(Date, 1);    

%# Preallocate a matrix to hold all the data, and add the date column
D = [Date, NaN(T, NumFile)];

%# Loop over the csv files, get the eleventh column and add it to the data matrix
for k = 1:NumFile
FileList = dir('*.csv');
NumFile = size(FileList,1);
    filename = FileList(k).name;
    disp(filename);
    %# Get the current file name
    CurFilePath = filename;

    %# Open the current file for reading and scan in the second column using numerical format
    fid1 = fopen(CurFilePath, 'r');
    CurData = textscan(fid1, '%*s %*s %*s %*s %*s %*s %*s %*s %f %*[^\n]', 'Delimiter', ',"', 'HeaderLines', 17, 'MultipleDelimsAsOne',true);
    fclose(fid1);

    %Add the current data to the cell array
    D(:, k+1) = CurData{1, 1};
end

Так, как более короткие месяцы могут быть вынуждены к размеру месяцев 31 дня соответствовать матрице заполнителя D.

1
nl ja de

1 ответы

Когда вы назначаете D с оператором двоеточия в одном измерении, Matlab должен предположить, что вы назначаете все элементы в ряду. Чтобы зафиксировать его, просто обменяйте двоеточие с 1:numberOfDaysInMonth .That способ, которым Matlab только присвоит номер ценностей, вы определяете и оставляете остальных без изменений, Нэн в этом случае.

numberOfDaysInMonth you can calculate as size(CurData{1, 1},1)

В целом, обмен, что предпоследняя линия в вашем сценарии с:

%Add the current data to the cell array
numberOfDaysInMonth = size(CurData{1, 1},1);
D(1:numberOfDaysInMonth, k+1) = CurData{1, 1};
3
добавлено
Работавший отлично!Thank you.
добавлено автор Evan M Kraemer, источник