矢量化在matlab中的方形矩阵上的循环

时间:2018-01-12 12:03:00

标签: matlab matrix vectorization

我有一个大方阵(refConnect),大约有500000个元素。 我需要执行此操作:

tmp = find(referenceCluster == 67);
for j=1:length(tmp)
    refConnect(tmp(j),tmp)=1;
end

我想知道是否有一种简单的方法来对此进行矢量化,这样我就可以避免永远占用的for循环。 谢谢你的帮助。 干杯

1 个答案:

答案 0 :(得分:0)

似乎你无法显着减少执行时间。 尝试使用此测试函数评估执行时间。

function test_spped(N, M)
if nargin < 1
    N = 707;
end
if nargin < 2
    M = 2;
end

refConnectIn = rand(N, N);
referenceCluster = randi(M, N, 1);

refConnectA = refConnectIn;
tic
tmpA = find(referenceCluster == 1);
for j=1:length(tmpA)
    refConnectA(tmpA(j),tmpA) = 1;
end
toc

refConnectB = refConnectIn;
tic
tmpB = referenceCluster == 1;
refConnectB(tmpB, tmpB) = 1;
toc

if isequal(refConnectA, refConnectB)
    disp('Result are equals');
else
    disp('Result are UNEQUALS!');
end

使用默认参数:

>> test_speed
Elapsed time is 0.002865 seconds.
Elapsed time is 0.001575 seconds.
Result are equals

注意,对于大M:

,矢量化代码(B情况)的执行时间可能更差
>> test_speed(707,1000)
Elapsed time is 0.001623 seconds.
Elapsed time is 0.002219 seconds.
Result are equals