Azzera filtri
Azzera filtri

Any ideas how vectorise this?

1 visualizzazione (ultimi 30 giorni)
Harry Smith
Harry Smith il 10 Nov 2017
Commentato: Harry Smith il 10 Nov 2017
Playing around with stock selection algorithm, hit this thousands of times any idea how to vectorise this. Any help appreciated.
function distances = calDistances(stocks, geneVector, dayN)
defaultNoData = 100;
distances(length(stocks)) = 100;
% Calculate Distances
for stockN = 1 : length(stocks)
% Get Stock Vector
stockVector = stocks(stockN).getStockVector(dayN);
% No Stock Data Check
if not(isnan(stockVector))
% Euclidian Distance
distances(stockN) = norm(stockVector - geneVector);
else
% Default no data
distances(stockN) = defaultNoData;
end
end
  2 Commenti
Jan
Jan il 10 Nov 2017
What is the purpose of "not(isnan(stockVector))"? Do you want:
if all(not(isnan(stockVector)))
?
Harry Smith
Harry Smith il 10 Nov 2017
Not all stocks have full data therefore to prevent an error in the euclidian distance I only use stocks with full data at that on that day, else default value

Accedi per commentare.

Risposta accettata

Jan
Jan il 10 Nov 2017
Modificato: Jan il 10 Nov 2017
At first a simplified version:
function distances = calDistances(stocks, geneVector, dayN)
defaultNoData = 100;
distances = repmat(defaultNoData, 1, length(stocks));
% Calculate Distances
for stockN = 1 : length(stocks)
% Get Stock Vector
stockVector = stocks(stockN).getStockVector(dayN);
% No Stock Data Check
if all(isfinite(stockVector))
% Euclidian Distance
distances(stockN) = norm(stockVector - geneVector);
end
end
Use the profiler to check, if calling norm() uses a significant part of the time. If so, replace it by:
distances(stockN) = sqrt(sum((stockVector - geneVector).^2));
While calculating the norm could be vectorized, this line cannot:
stockVector = stocks(stockN).getStockVector(dayN);
What is the class of stocks(stockN).getStockVector? Does getStockVector(dayN) really reply a vector?
Using a nested struct prevents a vectorization. You have to decide if the representation of the data should be nice to read or efficient to process.
  1 Commento
Harry Smith
Harry Smith il 10 Nov 2017
Thanks for the comment on euclidian distance, I'll have a look at that. Ive just checked the getStockVector, absolutely fine
The algorithm works fine just slow (24hours in a GA)

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by