MATLAB:矩阵到矢量行

如何有效地将矩阵转换为矢量向量。 例:

>> a = [1 2; 3 4]

a =

     1     2
     3     4

(:)符号给我:

>> a(:)

ans =

     1
     3
     2
     4

但我想要得到这样的结果:

>> b = a'; b(:)

ans =

     1
     2
     3
     4

换位和额外的变量赋值使其变得更慢。 我可以做到这一点,没有通过像这样重塑任务:

>> reshape(a',4,1)

ans =

     1
     2
     3
     4

这是比前一个更快的一点,看到板凳:

runs = 1000;
num = 1000;
A = rand(num);

times = zeros(runs, 2);
for i = 1:runs
    tic
    x = A';
    x = x(:);
    t1 = toc;
    x = reshape(A',size(A,1)*size(A,2),1);
    t2 = toc-t1;
    times(i,:) = [t1 t2];    
end
format shortG
mt = mean(times)

mt =

    0.0037877    0.0037699

如果我放弃转换,它会非常快,并且(:)语法会更快> 100%:

runs = 100;
num = 5000;
A = rand(num);

times = zeros(runs, 2);
for i = 1:runs
    tic
    x = A(:);
    t1 = toc;
    x = reshape(A,size(A,1)*size(A,2),1);
    t2 = toc-t1;
    times(i,:) = [t1 t2];    
end
format shortG
mt = mean(times)

mt =

    3.307e-07   8.8382e-07

这就是为什么我问是否有像(:)这样一个很好的语法,但要将它按行向列入向量!? 谢谢


想想如何在内存中组织元素。 他们的“自然”顺序是明智的。 因此A(:)简单地改变所述矩阵的头,但需要改变存储在存储器中的元素themselfs enything。 但是,当转置A ,您需要重新排列内存中的元素(复制和交换),这需要时间。

链接地址: http://www.djcxy.com/p/17907.html

上一篇: MATLAB: Matrix to Vector row

下一篇: JavaFX video not playing