Matlab:一步向量化转置?

时间:2013-03-23 14:22:21

标签: matlab

我想同时使用(:)运算符和转置。这可能吗?基本上我想做点什么

output = A'(:)

除了这不起作用。有没有人知道解决方法?

谢谢!

IMMO

2 个答案:

答案 0 :(得分:3)

在这种情况下,:运算符是将矩阵重新整形为向量的简写。您可以通过明确使用reshape函数来解决使用运算符的位置的限制:

octave>  A = [1 2;3 4]
A =

   1   2
   3   4

octave> B=A'
B =

   1   3
   2   4

octave> C=B(:)
C =

   1
   2
   3
   4

octave> D=reshape(A',[],1) #% vectorize transpose in one line
D =

   1
   2
   3
   4

答案 1 :(得分:2)

尝试:

output = reshape( A.', numel(A), 1);

>> A = rand(4,3);
>> output = reshape( A.', numel(A), 1);

A = 

    0.447213   0.046896   0.679087
    0.903294   0.768745   0.651481
    0.701071   0.122534   0.611390
    0.535844   0.478595   0.772810

output =

    0.447213
    0.046896
    0.679087
    0.903294
    0.768745
    0.651481
    0.701071
    0.122534
    0.611390
    0.535844
    0.478595
    0.772810

请注意,重塑会读取沿列访问的矩阵,因此您可能不需要转置矩阵A.

另外,请记住,运算符'是埃尔米特运算符,即转置的共轭运算符,而.'只是转置,您也可以通过转置(A)获得。

您可能希望在一行中完成所有操作,而无需每次都重新输入所有内容。一种解决方案是创建一个函数句柄作为boop:

>> boop = @(x) reshape( transpose(x), numel(x), 1)
>> output = boop(A)

output =

    0.447213
    0.046896
    0.679087
    0.903294
    0.768745
    0.651481
    0.701071
    0.122534
    0.611390
    0.535844
    0.478595
    0.772810