Prev: fitting sine waves
Next: Generate random sample
From: Enter The on 3 Mar 2010 05:43 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 3 Mar 2010 11:22 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 |