Я хотел бы векторизовать следующий фрагмент кода, который использует два цикла for для N ^ 2 итераций.Как я могу это сделать?(Просто чтобы узнать поток, этот код используется для повторной выборки заданных выборок и весов таким образом, чтобы на выходе были новые наборы выборок, которые формируются на основе весов, и после повторной выборки вес каждой выборки распределяется равномерно)
function [Xr, Wr, j] = resampl(X, W)
%RESAMPLE Resample particles and output new particles and weights.
% resampled particles.
%
% if old particle vector is x, new particles x_new is computed as x(:,j)
%
% Input:
% X [n x N] Particles, each column is a particle.
% W [1 x N] Weights, corresponding to the samples
%
% Output:
% Xr [n x N] Resampled particles, each corresponding to some particle
% from old weights.
% Wr [1 x N] New weights for the resampled particles.
% j [1 x N] vector of indices refering to vector of old particles
% Your code here!
N = size(X,2);
Wt = sum(W);
Wr = ones(1,N)/N;
for i = 1:N
B = Wt*unifrnd(0,1);
for ip = 1:N
B = B - W(ip);
if B < 0
j(i) = ip;
break;
end
end
end
for i = 1:N
Xr(:,i) = X(:,j(i));
end
end