例如,为什么1:5
和[1:5]
在matlab中相同?
这个惯例背后的原因是什么?
答案 0 :(得分:3)
如果没有询问MATLAB的创建者,很难说这个约定的原因,但这里有一点见解。如果这有点乱,我道歉。
如果您不打算阅读所有内容,请参阅执行摘要:
:
用于创建规则间隔的向量,而方括号用于连接。
首先,您应该知道甚至标量也被认为是MATLAB中的矩阵。标量只是1x1矩阵,或者更具体:1x1x1x1x ...... 1。理论上存在无限量的尾随单一维度。
1 == [1] == [[[1]]]
此外:
a = 1;
a(1,1,1,:,:,1) %% Messy indexing showing how you can index a matrix using more dimensions than it appears to have.
ans =
1
冒号运算符用于创建规则间隔的向量(和下标数组,并指定
for
次迭代)。
由于可以在没有括号的情况下创建标量,因此没有理由在明确且明确定义的运算符周围使用括号。
另一方面,括号[]
通过连接值和向量来创建向量或矩阵。来自文档:
方括号用于数组构造和连接,也用于声明和捕获函数返回的值。
因此,您基本上可以将括号括在您想要的任何地方。与上面的标量相同的例子:
1:4 == [1:4] == [[[1:4]]]
或在细胞周围(不会改变任何东西):
a = {3,1:4,'Hello, World!'}
a =
[3] [1x4 double] 'Hello, World!'
b = [a]
b =
[3] [1x4 double] 'Hello, World!'
连接字符串:
str1 = 'Hello';
str2 = ', World!';
str = [str1 str2]
str =
Hello, World!
连接向量:
[1:4, 6:8, 10]
ans =
1 2 3 4 6 7 8 10
如果你必须在1:4
部分放置括号,这将是(也可以,但更麻烦):
[[1:4], [6:8], 10]
ans =
1 2 3 4 6 7 8 10
该惯例的可能原因:
如果您需要1:3
左右的括号,则会有所不一致。
无关:对于习惯于其他编程语言的人来说,括号内的括号通常意味着你“上升”一个维度。因此,这可能会让一些人感到困惑。
答案 1 :(得分:0)
他们在某种程度上是不一样的,在MATLAB中,每件事都是矩阵,甚至
a = 5
是1x1矩阵,对于1-D矩阵或向量,它们将执行相同的操作 当你写作
>> x=1:3
ans =
1 2 3
MATLAB将矩阵视为一维,例如在下面的例子中,它只考虑声明的最后一行
>> x=1:3;2:4
ans =
2 3 4
但是当你指定括号时,它可以是一个nxm维矩阵
>> x=[1:3;1:3]
x =
1 2 3
1 2 3