フィルターのクリア

How to do it more efficiently?

1 回表示 (過去 30 日間)
Ilham Hardy
Ilham Hardy 2014 年 12 月 23 日
コメント済み: Ilham Hardy 2014 年 12 月 24 日
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),:);
  1 件のコメント
Ilham Hardy
Ilham Hardy 2014 年 12 月 24 日
Many thanks for the answer,

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by