How to do it more efficiently?

Hi,
In my script, this piece of code is taking about 70% of processing time.
The idea is to create uniform timestamp, it searches the time array and compare it with the Tsynced. if there is no similar entry, the other parameters to NaN.
Is there anyway to change the script below without using find function? Even better if no for-loop is required.
Code:
for ix = 1:length(time_synced)
[r,~,~] = find(cCells(:,1)==time_synced(ix),1,'first');
if isempty(r)
curArr(ix,:) = NaN;
else
curArr(ix,:) = cCells(r,:);
end
end
Thanks.

 Respuesta aceptada

Roger Stafford
Roger Stafford el 23 de Dic. de 2014

0 votos

See if this is faster:
[t,ic] = ismember(time_synced,cCells(:,1));
curArr(t) = cCells(ic);
curArr(~t) = NaN;
Note: This assumes that 'time_synced' and 'curArr' are vectors of the same length.

2 comentarios

Ilham Hardy
Ilham Hardy el 23 de Dic. de 2014
Ah, yes. It is way faster than the previous find+for-loop method.
Thanks.
Ilham Hardy
Ilham Hardy el 24 de Dic. de 2014
A bit correction for other fellow readers,
[t,ic] = ismember(time_synced,cCells(:,1));
curArr(t,:) = cCells(ic,:);
curArr(~t,:) = NaN;
PS: The curArr is preallocated.

Iniciar sesión para comentar.

Más respuestas (1)

Andrei Bobrov
Andrei Bobrov el 23 de Dic. de 2014

0 votos

[l0,ii] = ismember(time_synced,cCells(:,1));
out = nan(numel(time_synced),size(cCells,2));
out(l0,:) = cCells(ii(l0),:);

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 23 de Dic. de 2014

Comentada:

el 24 de Dic. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by