2016-11-08 64 views
0

我有一个包含n个元素的数组(A)。我知道B是0:10*n。如果元素B(i)A中,我希望B为1,否则为0。我目前做这个有:创建指标向量

A = [2,5,6] 
n = size(A,2) 
B = zeros(1,10*n+1) 
for i = 0:(10*n) 
    B(i+1) = ismember(i,A); 
end 

不过,我想这样做在O(n日志(n))的时间或更快。有没有关于ismember的速度的信息?有没有更快的方法来做到这一点?谢谢。

回答

4

无需为(慢)的for循环,如ismember可以在载体被调用,如下所示

% Sample data 
n = 10000; 
A = randi([0,10*n],1,n); 

% Slow for loop 
tic 
B = zeros(1,10*n+1); 
for i = 0:(10*n) 
    B(i+1) = ismember(i,A); 
end 
toc 

% Fast, vectorized version 
tic 
C = ismember(0:10*n, A); 
toc 

Elapsed time is 5.791429 seconds. 

Elapsed time is 0.012246 seconds. 

所得这几乎是因子的加速500.我不能告诉你它有什么计算复杂性,但它肯定比for-loop版本快很多。