我有一个包含n个元素的数组(A
)。我知道B是0:10*n
。当元素B
在B(i)
时,我希望A
为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(nlog(n))时间或更快的时间内完成此操作。有没有关于ismember
速度的信息?有更快的方法吗?感谢。
答案 0 :(得分: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版本快得多。