Any ideas how vectorise this?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Harry Smith
am 10 Nov. 2017
Kommentiert: Harry Smith
am 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 Kommentare
Jan
am 10 Nov. 2017
What is the purpose of "not(isnan(stockVector))"? Do you want:
if all(not(isnan(stockVector)))
?
Akzeptierte Antwort
Jan
am 10 Nov. 2017
Bearbeitet: Jan
am 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.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!