2016-11-08 29 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版本快很多。