随机Sampling/Matlab/Matrix

Random Sampling/Matlab/Matrix

我正在尝试创建一组 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;

这是因为您没有正确索引到时间序列数组来存储数据。您正在做的是,您只保存时间序列数组中 最后随机 选择的切片。如果你仔细观察你的循环,你只是在 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 的调用,以便您可以轻松更改矩阵的大小,并且它仍然可以工作而无需更改任何常量。