【发布时间】:2015-02-26 15:15:31
【问题描述】:
我正在寻找一种将矩阵的某些特殊值复制到其他矩阵的最快方法。假设我有矩阵 A 例如
A =[4 1 5 4 4
-2 -1 1 2 2
3 -1 1 7 3
5 3 -1 1 -2
6 4 4 -1 1]
我的目标是将值为 1 和 -1 的元素复制到矩阵 B。预期的矩阵 B 如
B =[ 0 1 0 0 0
0 -1 1 0 0
0 -1 1 0 0
0 0 -1 1 0
0 0 0 -1 1]
我执行了两种创建矩阵 B 的方法。但是,如果矩阵 A 的大小变大,我认为我的方法仍然不是最快的方法。我知道论坛有很多matlab专家。你能给我建议另一种方式吗? 这是我的代码
%%First way:
tic;B=((A==1)|(A==-1)).*A;toc
Elapsed time is 0.000026 seconds.
%%Second way:
tic;idx1=find(A==1);idx2=find(A==-1);B=zeros(size(A));B(idx1)=1; B(idx2)=-1;toc;B
Elapsed time is 0.000034 seconds.
【问题讨论】:
-
您的第一种方法是规范解决方案。在您开始尝试优化它之前,请在与您的应用程序中类似大小的矩阵上尝试此操作,看看您是否真的需要进一步优化它。你只是“认为”它不是最快的方式表明你过早地优化
-
对于这么快的时间最好使用
timeit,但对于这么小的矩阵,即使这样也是有问题的......