How to do it more efficiently?

1 次查看(过去 30 天)
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.

采纳的回答

Roger Stafford
Roger Stafford 2014-12-23
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 个评论
Ilham Hardy
Ilham Hardy 2014-12-23
Ah, yes. It is way faster than the previous find+for-loop method.
Thanks.
Ilham Hardy
Ilham Hardy 2014-12-24
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.

请先登录,再进行评论。

更多回答(1 个)

Andrei Bobrov
Andrei Bobrov 2014-12-23
[l0,ii] = ismember(time_synced,cCells(:,1));
out = nan(numel(time_synced),size(cCells,2));
out(l0,:) = cCells(ii(l0),:);

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by