From: Enter The on
I'm trying to work out how to speed up my code by removing the loop
and doing the loop in a single matrix statement, but I don't know how
to. Could anyone help?

loop_size = 10

num_products = 5
basket_size = 3
series_length= 180

series = rand(series_length,num_products)
ratios = rand(num_products,1)
baskets = nchoosek(1:num_products,basket_size)

num_baskets = nchoosek(num_products,basket_size);

tic;
m = zeros(num_products,num_baskets);

for i=1:num_baskets
m(baskets(i,:),i) = [1; -0.5; -0.5] .* ratios(baskets(i,:));
end

spreads1 = series*m;

toc;
From: Matt Fig on
Here's one approach:



M = zeros(num_products,num_baskets);
M(baskets+(cumsum(ones(size(baskets)))-1)*num_products) = ...
bsxfun(@times,ratios(baskets),[1 -0.5 -0.5]);
 | 
Pages: 1
Prev: fitting sine waves
Next: Generate random sample