如果你把它称为C(:),它将以什么顺序返回矩阵C.

时间:2015-11-05 19:00:42

标签: matlab matrix

我已为以下矩阵调用C(:)

[0 0 1]
[1 1 0]
[0 1 0]

,我得到的输出是:[0 1 0 0 1 1 1 0 0],即它从最右边的一个条目返回矩阵,从右到左移动到第一个条目。

其他时候它会返回包含左上角条目的数组,从左到右移动到最后一个条目。有时它会返回一些未知的东西。

我尝试在

上使用C(:)
[0 1 1]
[1 0 1]
[0 0 0]

我得到:[0 1 0 1 0 0 1 1 0]。我怎样才能让它始终从左上角的条目开始一直返回到最后一个条目?

2 个答案:

答案 0 :(得分:3)

C(:)根本没有任何不一致之处。无论你用这种方式调用它时使用什么矩阵,它的行为都是一样的。 C(:)打开矩阵,使其以列主格式堆叠。这意味着矩阵的所有列都堆叠在一起,以生成一列:

>> C = [1 2 3; 4 5 6; 7 8 9]

C =

     1     2     3
     4     5     6
     7     8     9

>> C(:)

ans =

     1
     4
     7
     2
     5
     8
     3
     6
     9

如果要打开行方式,则必须先转置矩阵。这样,所有行都成为列,反之亦然,因此当您按列主要顺序堆叠列时,行现在是列,从而完成您想要的行:

>> C = [1 2 3; 4 5 6; 7 8 9]

C =

     1     2     3
     4     5     6
     7     8     9

>> C = C.'

C =

     1     4     7
     2     5     8
     3     6     9

>> C(:)

ans =

     1
     2
     3
     4
     5
     6
     7
     8
     9

答案 1 :(得分:0)

这是MATLAB / Octave吗?如果是这样,据我所知,它与尺寸编号有关。例如,在2D矩阵中,第一维是线,第二维是列。

因此,使用(:)运算符将执行以下操作:

octave:1> x = magic(3)
x =

   8   1   6
   3   5   7
   4   9   2

octave:2> x(:)
ans =

   8
   3
   4
   1
   5
   9
   6
   7
   2

如果你想要反过来,只需事先调换矩阵:

octave:3> x'(:)
ans =

   8
   1
   6
   3
   5
   7
   4
   9
   2