Я пытаюсь найти способ векторизации цикла FOR в коде ниже:
h=load('water-column'); % load file
perm=5; % make 10000 permutation
n_1=5; % number of random sample
dm_ale=zeros(1,perm); % create a vector
sz=length(h); % count size of matrix data
for k=1:perm % making loop for the permutation
i_1=randsample(sz,n_1);
x_3=h(i_1);
x_4=h(setdiff(1:sz,i_1));
dm_ale(k)=abs(mean(x_3)-mean(x_4)); % calculate difference of mean for each permutation
end
Что касается ввода файла, у меня есть что-то вроде этого (просто пример, реальный файл содержит больше данных):
3792.615000000000
3792.625000000000
3792.634000000000
3792.640000000000
3792.647000000000
3792.654000000000
3792.662000000000
3792.668000000000
3792.673000000000
Я не могу понять, куда я могу поместить приращение в векторизованном выражении. Можно ли векторизовать это?
Когда код, предложенный Крисом Луенго (извините, я не могу понять, как пометить пользователя), натолкнулся на ошибку:
error: randsample: The input k must be a non-negative integer. Sampling without replacement needs k <= n.
error: called from
randsample at line 46 column 5
random_sampling at line 8 column 5
где random_sampling
- название кода.
Изначально мне нужно иметь perm
= 10000 (чтобы иметь надежный тест случайной выборки) и n_1
= 600 (количество населения, необходимое для того, чтобы мой тест мог работать). Код выше, кажется, не работает, даже если я подчиняюсь условию: n_1^2
<< <code>perm.
Я предполагаю, что ошибка связана с n_1
, который все еще достаточно велик по отношению к perm
.
Любое другое руководство? Я думаю об увеличении perm
.