Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 平均数据时,为窗口大小找到合适的大小_Matlab_Window - Fatal编程技术网

Matlab 平均数据时,为窗口大小找到合适的大小

Matlab 平均数据时,为窗口大小找到合适的大小,matlab,window,Matlab,Window,我正在编写一个函数,它需要一个日期的输入向量(我指定为Julian dates)和一系列值(作为向量)。在函数中,我使用预定义的窗口大小来删除数据中的任何NAN。例如: t = transpose(1/24:1/24:40); data1 = 1+(30-1).*rand(length(t),1); Randm = floor(1+(length(t)-1).*rand(120,1)); data1(Randm) = nan; figure(1); plot(data1,'linewidth',

我正在编写一个函数,它需要一个日期的输入向量(我指定为Julian dates)和一系列值(作为向量)。在函数中,我使用预定义的窗口大小来删除数据中的任何NAN。例如:

t = transpose(1/24:1/24:40);
data1 = 1+(30-1).*rand(length(t),1);
Randm = floor(1+(length(t)-1).*rand(120,1));
data1(Randm) = nan;
figure(1);
plot(data1,'linewidth',3);
hold on;

dailyData = reshape(data1,40,[]);
nanMap = isnan(dailyData);
validValuesPerDay = sum(~nanMap, 2);
nonNanData = dailyData;
nonNanData(nanMap) = 0;
sumPerDay = sum(nonNanData, 2);
dailyMeans = sumPerDay ./ validValuesPerDay;
dailyMeans = repmat(dailyMeans, [1 24]);
repairedData = dailyData;
repairedData(nanMap) = dailyMeans(nanMap);
data1 = reshape(repairedData,[],1);
plot(data1,'--r');

我现在面临的问题是如何处理与每小时(例如每天或每周)分辨率不同的数据,因为这将在我使用重塑时影响代码。有人对如何处理这个问题有什么建议吗?我在考虑做一些事情,将窗口大小指定为数据长度的一部分(我的意思是在使用重塑时)。一般来说,您必须为所需的所有不同功能编写单独的例程。例如,如果您获得每日数据,您想做什么?平均数周?两周?月?几年

因此,最稳健的选择是(假设您总是得到线性网格化的时间):


请注意,
重塑
可能是您在开关中需要执行的唯一操作;代码的其余部分将保持不变。您可能需要重新考虑变量名…

通常,您必须为所有需要的不同功能编写单独的例程。例如,如果您获得每日数据,您想做什么?平均数周?两周?月?几年

因此,最稳健的选择是(假设您总是得到线性网格化的时间):

请注意,
重塑
可能是您在开关中需要执行的唯一操作;代码的其余部分将保持不变。不过,您可能需要重新考虑变量名

switch t(2)-t(1)
    case 1/24 % hourly data
        dailyData = reshape(data1,[], 24);
        ... etc.

    case 1 % daily data
        weeklyData = reshape(data1,[], 7);
        ... etc.

    case 7  % weekly data
        yearlyData = reshape(data1,[], 52);
        ... etc.

    otherwise
        ... issue error

end