随机抽样/ Matlab /矩阵

时间:2015-01-23 19:57:48

标签: matlab random matrix sampling

我正在尝试创建一组320个矩阵,每个矩阵的尺寸为1152 x 241.每个矩阵代表一个不同的时间步长。我正在尝试使用另一个文件中的随机值填充每个单元格。这个其他文件的大小也是1152 x 241,但是有大约2520个时间步骤可供选择。

所以应该发生的事情是选择一个单元格,从大文件中随机时间步长填充一个值,然后移动到相邻单元格并执行相同的操作。重复,直到创建了320个矩阵。

问题是我运行代码而我只创建一个矩阵。我需要做些什么才能修复我的代码,以便创建320个矩阵?谢谢!

clear all;
clc;

% Load datafile
load 1979_1999_tropics_subset_3mmhr.mat

% Create empty maps
rain_fake_timeseries = zeros(1152,241,320);

for i = 1:1152; % set longitude
    %disp(i)
    for j = 1:241; % set latitude
        %disp(j)
        %for k = 1:320; % create map
            %disp(k)
            rain_fake_timeseries = datasample(rain_sample_1979_1999,1,3);
            %disp(rain_fake_timeseries)
            %save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3;
        %end
    end
end

save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3;

1 个答案:

答案 0 :(得分:1)

这是因为您没有正确索引到时间序列数组以存储数据。您所做的是您只在时间系列数组中保存最后一个随机选定的切片。如果仔细观察循环,只需在for循环的每次迭代时覆盖输出数组。

您也没有正确创建for循环。如果我理解正确,则切片中的每个位置都代表一个唯一的(x,y)坐标。对于您拥有的每个矩阵,您希望从这个完全相同的位置进行采样,但暂时搜索~2500个时间实例。因此,您需要使用所有循环变量ijk来索引3D矩阵。您还需要访问位置(i,j)的所有时间切片,并从所有切片中随机采样。如果我可以建议一个小的优化更改,我们只用两个for循环而不是三个循环,在这个位置为所有时间片随机选择320个点,并将其存储到3D矩阵中。

换句话说:

clear all;
clc;

% Load datafile
load 1979_1999_tropics_subset_3mmhr.mat

% Create empty maps
rain_fake_timeseries = zeros(1152,241,320);

for i = 1 : size(rain_fake_timeseries,1)
    for j = 1 : size(rain_fake_timeseries,2)
        rain_fake_timeseries(i,j,:) = datasample(rain_sample_1979_1999(i,j,:), ...
                                      size(rain_fake_timeseries,3), 3);
    end
end

save random_clus_fake_timeseries.mat rain_fake_timeseries -v7.3;

请注意,我已使用for调用替换了size循环中的维度,以便您可以轻松更改矩阵的大小,并且无需更改任何常量,它仍可正常工作