|
采用少拿多取的思想可以如下优化:
- clear
- A=unidrnd(100,1000000,7);%这里先假设A是一个随机矩阵
- AA = A;
- B = repmat([4,6,8],1000000,1);
- BB = B;
- tic;C = [any(ismember(A,4),2) any(ismember(A,6),2) any(ismember(A,8),2)];B(C) = 0;toc
复制代码 或者
- tic;C = [any(AA == 4,2) any(AA == 6,2) any(AA == 8,2)];
- BB(C) = 0;toc
- isequal(B,BB)
复制代码 前者比后者更快,大约快10%,可见ismember效率相当高,对于大规模数组,比单独恒等逻辑判断都高。(我用的MATLAB是R2009a版本)
前者方法在我电脑上用时0.18秒左右,而楼主用循环的那个用时8秒多,速度提高了40多倍!我的电脑CPU是 扣肉2 T8100,内存2G
[ 本帖最后由 rocwoods 于 2009-6-15 02:11 编辑 ] |
评分
-
1
查看全部评分
-
|