Я пытаюсь написать программу, которая извлекает минимальные температуры из набора данных data
для данного месяца, времени и года.
Это означает, что человек должен иметь возможность выбрать время, начальный / конечный год и получить матрицу lowTempsOverYears
, которая должна содержать все самые низкие значения температуры за январь-декабрь между двумя выбранными годами при определенныхвремя.
Демонстрируя, что я имею в виду, я приведу краткий пример.Возьмите два года: 1997-2001 и время, скажем, 1200. Это должно дать мне матрицу, связывающую самые низкие температуры, зарегистрированные за все месяцы между 1997 и 2001 годами. Результат должен быть матрицей 4x12, где у меня есть 4 разные температуры для каждогостолбец, который обозначает месяц.
Вы можете найти мою программу ниже:
function algo= getMiniserie(data, startYear, endYear, time)
YearInterval = startYear:1:endYear;
for month = 1:12
lowTempsOverYears = zeros(length(YearInterval),12);
for yearNumber = 1:length(YearInterval)
year = YearInterval(yearNumber);
p = extractperiod(data,year,month,time);
if ~isempty(p)
q = min(p);
lowTempsOverYears(yearNumber,month) = q;
end
end
algo = lowTempsOverYears;
end
end
Переменная data
, из которой я извлекаю свои данные, состоит из 3 столбцов и 400k + строк.
* первый столбец обозначает дату (ГГГГММДД)
* второй столбец обозначает время
* третий столбец обозначает температуру
И что за extractperiod
Функция делает то, что, как следует из названия, извлекает все температуры для данного месяца / года / времени.
Когда я пытаюсь вызвать свою функцию:
>> getMiniserie(data, 1997, 2001, 1200)
, я получаю https://imgur.com/a/XpfqUoh.
Любые идеи о том, как яМожно ли улучшить мой код, чтобы получить желаемый результат?
Моя идея состояла в том, чтобы создать переменную, которая будет хранить все минимальные значения для каждой итерации месяца.
Итак, я инициализировал lowTempsOverYears
, чтобы сделать его (в данном конкретном случае, когда начальный / конечный год 1997 и 2001 гг.) Матрицей 4x12
.Где во время первой итерации месяца все минимальные температуры за январь сохраняются в первом столбце, где все выбранные годы представлены строками.
Пожалуйста, не стесняйтесь спрашивать, пропустил ли я что-то из моего объяснения, я с радостью добавлю к картинке.
код для extractperiod
function mdata = extractperiod(data,year,month,time)
x = year*100 + month;
k = find(floor(data(:,1)/100) == x & (data(:,2) == time));
mdata = data(k,3);
end