MATLAB:矩阵到行向量

时间:2013-12-15 14:13:37

标签: matlab vector matrix row reshape

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

>> a = [1 2; 3 4]

a =

     1     2
     3     4

(:)符号表示我:

>> a(:)

ans =

     1
     3
     2
     4

但我希望得到结果:

>> b = a'; b(:)

ans =

     1
     2
     3
     4

转置和附加的var-assignment使得它变得更慢。 我可以通过像这样的重塑来完成任务:

>> 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

这就是为什么我会问这样一个很好的语法,比如(:),但要将它按顺序排列到矢量!? 感谢

1 个答案:

答案 0 :(得分:3)

考虑元素在内存中的组织方式。他们的“自然”顺序是列式的。因此A(:)只是更改矩阵的标题,但需要更改存储元素的内存中的enything。但是,当您转置A时,需要重新排列内存中的元素(复制和交换),这需要时间。