Performance 这个MATLAB脚本有没有更快的方法?
原稿是Performance 这个MATLAB脚本有没有更快的方法?,performance,matlab,matrix,Performance,Matlab,Matrix,原稿是 Y = [1 2 3 3 2 1 1 2 3]'; n = length(Y); Ym = zeros(n, n); for i=1:n index = find(Y==Y(i)); Ym(i, index') = 1; end 然后,Ym Ym = 1 0 0 0 0 1 1 0 0 0 1 0 0 1
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
for i=1:n
index = find(Y==Y(i));
Ym(i, index') = 1;
end
然后,Ym
Ym =
1 0 0 0 0 1 1 0 0
0 1 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1
0 0 1 1 0 0 0 0 1
0 1 0 0 1 0 0 1 0
1 0 0 0 0 1 1 0 0
1 0 0 0 0 1 1 0 0
0 1 0 0 1 0 0 1 0
0 0 1 1 0 0 0 0 1
对!!与-
对!!与-
我发现在我的计算机上,逻辑索引比bsxfun工作得更快。以下是不同方法的采样时间:
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
for i=1:n
index = find(Y==Y(i));
Ym(i, index') = 1;
end
end
disp('Method 1:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
for i=1:n
Ym(i, Y==Y(i)') = 1;
end
end
disp('Method 2:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
a=repmat(Y,1,n);
b=repmat(Y',n,1);
Ym(a==b)=1;
end
disp('Method 3:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
Ym = bsxfun(@eq,Y,Y.');
end
disp('Method 4');
toc
输出:
Method 1:
Elapsed time is 0.111412 seconds.
Method 2:
Elapsed time is 0.069617 seconds.
Method 3:
Elapsed time is 0.246780 seconds.
Method 4
Elapsed time is 0.103120 seconds.
我发现在我的计算机上,逻辑索引比bsxfun工作得更快。以下是不同方法的采样时间:
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
for i=1:n
index = find(Y==Y(i));
Ym(i, index') = 1;
end
end
disp('Method 1:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
for i=1:n
Ym(i, Y==Y(i)') = 1;
end
end
disp('Method 2:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
n = length(Y);
Ym = zeros(n, n);
a=repmat(Y,1,n);
b=repmat(Y',n,1);
Ym(a==b)=1;
end
disp('Method 3:');
toc;
tic;
for j=1:10000
Y = [1 2 3 3 2 1 1 2 3]';
Ym = bsxfun(@eq,Y,Y.');
end
disp('Method 4');
toc
输出:
Method 1:
Elapsed time is 0.111412 seconds.
Method 2:
Elapsed time is 0.069617 seconds.
Method 3:
Elapsed time is 0.246780 seconds.
Method 4
Elapsed time is 0.103120 seconds.
您好,非常感谢您提供这些可能的实现和比较。我已经运行了你的代码好几次了,看来第四种方法是最快的。测试计算机没有运行其他程序。第二种方法是次优的,比第四种方法慢一点。据我所知,bsxfun应该大致等于第二种方法。但是当我注意到我电脑上的异常情况时,我想我应该分享所有适合你的方法。谢谢!非常感谢您的分享!事实上,我遇到了一些性能问题,因此我想加速那些运行缓慢的脚本。但另一方面,我发现我没有更多的想法如何加快他们。你的分享意义重大!谢谢关于速度,我认为这或多或少取决于硬件或软件的运行环境。您好,非常感谢您提供这些可能的实现和比较。我已经运行了你的代码好几次了,看来第四种方法是最快的。测试计算机没有运行其他程序。第二种方法是次优的,比第四种方法慢一点。据我所知,bsxfun应该大致等于第二种方法。但是当我注意到我电脑上的异常情况时,我想我应该分享所有适合你的方法。谢谢!非常感谢您的分享!事实上,我遇到了一些性能问题,因此我想加速那些运行缓慢的脚本。但另一方面,我发现我没有更多的想法如何加快他们。你的分享意义重大!谢谢至于速度,我认为这或多或少取决于硬件或软件的运行环境。