0

我想同时使用 (:) 运算符和转置。这可能吗?基本上我想做类似的事情

output = A'(:)

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

谢谢!

伊莫

4

2 回答 2

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
于 2013-03-23T14:36:23.537 回答
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

请注意,reshape 会读取沿列访问的矩阵,因此您可能不需要转置矩阵 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
于 2013-03-23T14:40:46.927 回答