Векторизация в MATLAB, чтобы избежать петель - PullRequest
0 голосов
/ 22 марта 2019

Я хотел бы векторизовать следующий фрагмент кода, который использует два цикла 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...