我遇到了一些带有冒号的MATLAB语法,我并不完全理解。
表达式:0:pi/4:pi
得到答案:0 0.7854 1.5708 2.3562 3.1416
为什么会这样?我认为使用冒号运算符作为引用索引的快速方法,这样我们就不必写出完整的列表。 (例如1:3
- > 1 2 3
)
与上面类似,假设我有一个矩阵X = [1 2 3 4 5 6 7 8 9]
。如何解释表达式X(:,1:3)
?具体来说,没有左右数字的冒号运算符是什么意思?
答案 0 :(得分:3)
实际上a:b
会生成一个向量。您可以仅将其用作索引,因为(...)
也接受列表,例如
octave-3.0.3:10> a = [1,4,7]
a =
1 4 7
octave-3.0.3:11> b = [1,4,9,16,25,36,49]
b =
1 4 9 16 25 36 49
octave-3.0.3:12> b(a) # gets [b(1), b(4), b(7)]
ans =
1 16 49
现在,a:b:c
语法相当于[a, a+b, a+2*b, ...]
,直到c
,例如
octave-3.0.3:15> 4:7:50
ans =
4 11 18 25 32 39 46
解释了0:pi/4:pi
中的内容。
单独的:
选择整个轴(行/列),例如
octave-3.0.3:16> a = [1,2,3;4,5,6;7,8,9]
a =
1 2 3
4 5 6
7 8 9
octave-3.0.3:17> a(:,1) # means a(1:3, 1)
ans =
1
4
7
octave-3.0.3:18> a(1,:) # means a(1, 1:3)
ans =
1 2 3
有关详细信息,请参阅colon (:)上的官方MATLAB文档。
答案 1 :(得分:0)
我对KennyTM的答案我的两个便士。
实际上MATLAB中的标量和矢量变量有2个维度。标量有1行1列,向量有1行或1列。试试size(X)
。
用于索引的冒号(:
)运算符仅表示全部。语法X(:,1:3)
表示从1到3获取所有行和列。由于变量X
只有1行,因此您将在此行中获得前3个值。