Any ideas how vectorise this?

4 visualizaciones (últimos 30 días)
Harry Smith
Harry Smith el 10 de Nov. de 2017
Comentada: Harry Smith el 10 de Nov. de 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 comentarios
Jan
Jan el 10 de Nov. de 2017
What is the purpose of "not(isnan(stockVector))"? Do you want:
if all(not(isnan(stockVector)))
?
Harry Smith
Harry Smith el 10 de Nov. de 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

Iniciar sesión para comentar.

Respuesta aceptada

Jan
Jan el 10 de Nov. de 2017
Editada: Jan el 10 de Nov. de 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 comentario
Harry Smith
Harry Smith el 10 de Nov. de 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)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by