【问题标题】:Usage of square brackets in MATLABMATLAB中方括号的使用
【发布时间】:2016-12-08 11:30:56
【问题描述】:

在 MATLAB 中,您可以轻松地创建整数数组

N = 100; % Number of points
A = 1:N; % row vector of 1,2,3,..., 100

如果我想要一个列向量而不是行向量,我可以这样做

A = [1:N].';

现在,MATLAB 警告我

Use of brackets [] is unnecessary. Use parentheses to group if necessary.

好吧,它们不是必需的,因为 1:N.' 创建了一个行向量,因为只有标量 N 被转置,而不是整个数组。

我当然可以在该行、该文件或所有文件中禁止显示此消息,但是为什么 MATLAB 会首先抛出此警告,因为在这种情况下我似乎无法没有这些括号?

事实证明,大部分混淆源于 The MathWorks 对美式英语的使用,因为其他英语世界使用术语括号表示()和术语 方括号代表[]。见Wikipedia

【问题讨论】:

    标签: matlab vector square-bracket


    【解决方案1】:

    正如 MATLAB 警告您的那样:Use parentheses to group if necessary. 在您的情况下,这是必要的。您希望 .' 应用于 1:N,因此使用括号 ()。 方括号[]是用来收集里面的元素,但是1:N已经被收集了

    A=(1:N).';
    

    【讨论】:

    • 收集的数组上的方括号基本上充当圆括号,因为数组已经被收集了我的直觉是,虽然它们可以这样使用,但它们可能会减慢速度(由于连接/收集操作),与使用圆括号相比
    • @LuisMendo 我同意;额外的方括号是一种操作。
    • @LuisMendo 这可能是 MATLAB 向我发出此警告的主要原因,因为如果执行时间没有差异,则无需警告您使用不同的括号/括号/但是你想打电话给那些。
    【解决方案2】:

    方括号用于声明数组。但是,MATLAB 的语法是这样构建的,因此1:n 已经创建了一个数组。

    [1:3] 将等同于 [[1 2 3]],这就是为什么 MATLAB 会告诉您在这种情况下不需要方括号

    这就是说,由于operator precedence,您肯定需要在转置之前用括号对数组声明进行分组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2013-04-20
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多