【发布时间】:2015-11-19 21:07:43
【问题描述】:
在 Matlab 中我们有这样的场景:
v =[1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 .... N N N N];
其中 v 中的元素始终按从 1 到 N 递增的顺序排列,我们知道 N 的值。我们想计算 v 中 '1' 和 '2' ... 的数量。
当然,我们可以使用如下循环:
for i = 1 : N
% method A
tic
ind = find(v == i)
---> do sth with ind
t1 = toc;
% method B
tic
ind = v(v == i)
---> do sth with ind
t2 = toc;
% method C
tic
ind = ismember(v , i)
---> do sth with ind
t3 = toc;
end
每种方法所需的时间大致等于 $t1=0.02 sec$、$t2=0.02 sec$ 和 $t3=0.03 sec$。在我的实际工作中,N 很大,整个循环需要 2 -3 个小时!
您是否认为可以增加执行此过程的时间?任何想法都值得赞赏。
【问题讨论】:
标签: matlab vector vectorization