Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 这个MATLAB脚本有没有更快的方法?_Performance_Matlab_Matrix - Fatal编程技术网

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应该大致等于第二种方法。但是当我注意到我电脑上的异常情况时,我想我应该分享所有适合你的方法。谢谢!非常感谢您的分享!事实上,我遇到了一些性能问题,因此我想加速那些运行缓慢的脚本。但另一方面,我发现我没有更多的想法如何加快他们。你的分享意义重大!谢谢至于速度,我认为这或多或少取决于硬件或软件的运行环境。