给出以下示例:
>> I=[2 1 3;3 2 4] I = 2 1 3 3 2 4 >> I(:) ans = 2 3 1 2 3 4 >> I(1:2) ans = 2 3
为什么I(:)返回列向量,而I(1:2)返回较短的行向量?
I(:)
I(1:2)
rfbsl7qr1#
当(:)语法用作等式右侧的索引时,它是一个special operation,可将任意维的整个矩阵重新整形为单个列向量。因此,以下两行代码给予了相同的结果:
(:)
a = I(:); % Create a column vector with ":" a = reshape(I, [], 1); % Create a column vector with RESHAPE
当数值包含在单个冒号的两侧时,表示数组中的线性索引范围,因此I(1:2)从I中选择第一个和第二个元素(即第一列中的值)。需要记住的一件事是语法1:2实际上创建了向量[1 2],因此I(1:2)与I([1 2])相同。由于线性索引[1 2]是行向量,因此返回值的形状为行向量[2 3]。如果使用索引I([1; 2])或I((1:2).'),则线性索引是列向量,因此返回值将被整形为列向量[2; 3]。当您有多个用逗号分隔的索引时,这些索引将应用于所索引矩阵的不同维。例如,I(1:2, 1:2)将返回2 × 2矩阵[2 1; 3 2]。索引中的第一个1:2应用于行,因此选择了行1和行2。索引中的第二个1:2应用于列。因此选择列1和列2。描述colon operator和matrix indexing的MATLAB文档应该给予您更好地理解如何有效地使用:。
I
1:2
[1 2]
I([1 2])
[2 3]
I([1; 2])
I((1:2).')
[2; 3]
I(1:2, 1:2)
[2 1; 3 2]
:
u59ebvdq2#
[rows,cols] = size(M); % M is a rows x cols matrix
访问第i行第j列的条目:
x = M(i,j);
访问第i行上的所有项:
r = M(i,:);
访问列j上的所有项目:
c = M(:,j);
访问第i行第j列的条目,将M视为向量:
x = M(rows*(j-1)+i);
从行i到行j以及从列p到列q访问子矩阵:
S = M(i:j,p:q);
访问整个矩阵(冗余):
M = M(:,:);
冒号运算符给出索引的范围(1:2是范围1到2(包括1和2)中的索引,而3:5给出范围3、4、5),或者如果未指定范围,则给出给定维的整个范围。这一点,再加上只使用一个索引来索引矩阵,会给你遍历那么多条目(向下遍历行、递增列并在最后一行之后重置行)而不是只给你指定的行/列,从而导致你的观察结果。
w9apscun3#
(:)沿着列对矩阵进行矢量化,即沿列读取元素并将其连接为单个列向量。a:b:c返回从a到c的数字序列,增量为b。如果省略b,则默认设置为1。序列a:b:c可用于沿着列线性索引矩阵。如果用于索引多维数组,则它沿该维度选择元素。
a:b:c
a
c
b
1
I(1,2:3)
返回由I的行1和列2:3组成的矩阵,即[1 3]同样,我们可以用任何方式得到一个索引,并用它来索引I。
2:3
[1 3]
index = [1 2 3]; disp(I(index));
上面显示了以列为主顺序(沿着列)的前三个元素,即[2 ; 3 ; 1]
[2 ; 3 ; 1]
3条答案
按热度按时间rfbsl7qr1#
当
(:)
语法用作等式右侧的索引时,它是一个special operation,可将任意维的整个矩阵重新整形为单个列向量。因此,以下两行代码给予了相同的结果:当数值包含在单个冒号的两侧时,表示数组中的线性索引范围,因此
I(1:2)
从I
中选择第一个和第二个元素(即第一列中的值)。需要记住的一件事是语法1:2
实际上创建了向量[1 2]
,因此I(1:2)
与I([1 2])
相同。由于线性索引[1 2]
是行向量,因此返回值的形状为行向量[2 3]
。如果使用索引I([1; 2])
或I((1:2).')
,则线性索引是列向量,因此返回值将被整形为列向量[2; 3]
。当您有多个用逗号分隔的索引时,这些索引将应用于所索引矩阵的不同维。例如,
I(1:2, 1:2)
将返回2 × 2矩阵[2 1; 3 2]
。索引中的第一个1:2
应用于行,因此选择了行1和行2。索引中的第二个1:2
应用于列。因此选择列1和列2。描述colon operator和matrix indexing的MATLAB文档应该给予您更好地理解如何有效地使用
:
。u59ebvdq2#
访问第i行第j列的条目:
访问第i行上的所有项:
访问列j上的所有项目:
访问第i行第j列的条目,将M视为向量:
从行i到行j以及从列p到列q访问子矩阵:
访问整个矩阵(冗余):
冒号运算符给出索引的范围(1:2是范围1到2(包括1和2)中的索引,而3:5给出范围3、4、5),或者如果未指定范围,则给出给定维的整个范围。
这一点,再加上只使用一个索引来索引矩阵,会给你遍历那么多条目(向下遍历行、递增列并在最后一行之后重置行)而不是只给你指定的行/列,从而导致你的观察结果。
w9apscun3#
(:)
沿着列对矩阵进行矢量化,即沿列读取元素并将其连接为单个列向量。a:b:c
返回从a
到c
的数字序列,增量为b
。如果省略b
,则默认设置为1
。序列
a:b:c
可用于沿着列线性索引矩阵。如果用于索引多维数组,则它沿该维度选择元素。返回由
I
的行1
和列2:3
组成的矩阵,即[1 3]
同样,我们可以用任何方式得到一个索引,并用它来索引I。
上面显示了以列为主顺序(沿着列)的前三个元素,即
[2 ; 3 ; 1]