在matlab中列出带/不带括号的声明

时间:2016-06-10 04:22:22

标签: matlab

例如,为什么1:5[1:5]在matlab中相同? 这个惯例背后的原因是什么?

2 个答案:

答案 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

documentation说:

  

冒号运算符用于创建规则间隔的向量(和下标数组,并指定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