我已为以下矩阵调用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]
。我怎样才能让它始终从左上角的条目开始一直返回到最后一个条目?
答案 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