为什么元胞数组中的尾随逗号是有效的 Matlab 语法?

2024-01-08

今天我很惊讶地发现

A = {1,2,3}

and

B = {1,2,3,}

都是 MATLAB 中的有效语法。我原以为第二个语句会产生错误。据我所知,它们产生相同的单元阵列(all([A{:}]==[B{:}])返回真)。

允许使用第二种语法有什么原因吗?这是解析器中的错误吗?是A and B真的一样吗?

有趣的是,下面是not允许:

C = {1,2,3,,,}

这些更多的是猜测,而不是答案。

人们可以检查符号参考 http://www.mathworks.com/help/matlab/matlab_prog/symbol-reference.html并发现comma ,可以用作

命令或语句分隔符

要在同一行输入多个 MATLAB 命令或语句, 用逗号分隔每个命令或语句:

for k = 1:10, sum(A(k)), end

在行

B = {1,2,3,}

因此之后的声明3预计,只有}, 意思是元胞数组末尾,有效的陈述。


The 分号;官方有3种用法:

数组行分隔符

当在方括号内使用来创建新数组或连接时 现有数组,分号在数组中创建一个新行:

A = [5, 8; 3, 4]

输出抑制

当分号放在命令末尾时,分号告诉 MATLAB 不要 显示该命令的任何输出。在此示例中,MATLAB 不 显示生成的 100×100 矩阵:

A = ones(100, 100);

命令或语句分隔符

与逗号运算符一样,您可以在上输入多个 MATLAB 命令 用分号分隔每个命令的一行。 MATLAB 抑制 这些命令的输出以分号结尾,并显示 以逗号结尾的命令的输出。

在此示例中,对变量 A 和 C 的赋值终止于 分号,因此不显示。因为对B的赋值是 以逗号结尾,显示此命令的输出:

A = 12.5; B = 42.7, C = 1.25;

所以在行中

x = {1,2,3,;5,6,7}

它遵循有效的陈述数组行分隔符 after 3,。之后预计会出现一个新的语句,在本例中是双精度语句5. Valid.


现在考虑这个案例

x = {1,2,3,;;;;4,5,6;;;}

如上之后3,遵循声明数组行分隔符,之后的语句是想必 the 空语句 - NOP https://en.wikipedia.org/wiki/NOP借用了一些底层程序核心编写的C,这基本上意味着:没做什么。所以之后3,;跟随三遍“没做什么”,在出现下一个语句之前。没有意义,正如 Matlab 告诉你的:额外的分号是不必要的。 - 但有效。

它还允许你做一些毫无意义的事情,比如:

if true
    ;
end

这是想必也是原因

C = {1,2,3,,,} 

返回错误,因为逗号,不是一个空语句,但在第一个逗号之后有一个预期的声明。


底线:它看起来很奇怪,但实际上对我来说似乎是逻辑的,因为 Matlab 在内部使用了大量的 C 代码,并且考虑到 null 语句,提到的所有内容都是有效的语法。


其他语言呢?

分号的用法就像x = [1,2,3,;;;;4,5,6;;;]在 Python 中无效,即使在预期的 Matlab 克隆中也是如此numpy,除非包含在这种不常见的语法中a = np.matrix('1,2,3;4,5,6').

a = np.matrix('1,2,3,;;;;4,5,6;;;')

也会抛出一个错误,因为;被解释为数组行分隔符无论如何,这都会让编译器抱怨行大小不一致。

然而,

x = [1,2,3,]

也是有效的语法Python and IronPython,正如它在VBScript and Lua如中提到的mlepage 的回答 https://stackoverflow.com/a/32853489/2605073。所有这些语言有什么共同点?它们(或多或少)都是在运行时解释的脚本语言。这不仅仅是Matlab。因此,OP 的兴奋仍然没有理由。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么元胞数组中的尾随逗号是有效的 Matlab 语法? 的相关文章

随机推荐

  • Magento - 无法将产品添加到管理面板后端的手动订单中

    我遇到一个问题 当我在 Magento 1 4 1 1 的管理面板中创建订单时 我可以启动订单 选择客户 然后选择语言 它会加载所有信息 但是当我去时到 添加产品 我可以打开它并选择产品 但是当我单击 将所选产品添加到订单 时 它会短暂显示
  • 在尊重括号的同时用逗号分割列表中的字符串

    我有一个清单 例如 a john is great paul school robert jack john 然后我正在构建一个空列表来附加分割 b 然后我这样做 for i in a b append i split 但列表是这样出现的
  • 如何防止鼠标监听器暂时出现在窗口上?

    我正在用 Java 编写一个游戏 这是我试图做得 漂亮 的第一个游戏 这款游戏名为 Bantumi 这是一款棋盘游戏 现在我正在为动作编写动画 问题是 当运动动画运行时 板仍然会获取鼠标事件 如果用户选择新的运动 则正在运行的运动将被丢弃
  • FileProvider“无法找到配置的根”异常

    这些 FileProvider 又一个失去了灵魂 我已经在这个问题上工作了一天多了 看来我错过了一些大东西 任何帮助 将不胜感激 我正在尝试使用 FileProvider 发送带有附件的电子邮件 我的 AndroidManifest xml
  • 将会话中保存的数组中的多行插入表中?

    我使用一个插入命令通过 php 将存储在会话变量中的多个状态值传递到 MySQL 表中 我想知道是否可以将每个状态值插入到不同的行中 我还有一个 ID 保存在变量中 我想将其与每个状态一起插入 campaign id 每个状态都存储在该会话
  • 匹配 foo 或 bar vim 正则表达式

    有没有一种方法可以同时匹配多个单词vim搜索和替换 就像是 s foo bar g 寻找foo or bar并替换为任何内容 这会搜索模式foo bar 这不是我想要的 我可以搜索多个人物这边走 abcdef s ace g 结果是 bdf
  • 有没有办法在开发时只刷新 javascript include ?

    在 js 文件上进行开发时 我只想刷新该文件而不是整个页面以节省时间 有人知道这方面的技术吗 这是创建新脚本元素的函数 它附加一个递增的整数以使脚本的 URL 唯一 如 Kon 建议 以便强制下载 var index 0 function
  • Laravel 4 Auth::attempt() 总是返回 false

    我正在尝试 Laravel 的 Auth 类 但每次我尝试登录用户时 该方法都会返回 false 这是我的代码 路线 php Route get new user function return View make register Rou
  • 使用Fisher方法matlab组合P值?

    完成 CDF 后 我收到了以下值P 其中的样本 0 43 0 12 0 0021 0 05 0 017 0 001 0 025 0 038 0 35 0 29 我想结合我的P值的帮助下Fisher https en wikipedia or
  • 基于json输入绘制网络拓扑图

    我想通过证明 json 数据作为输入 使用 Highchart 或任何其他 js 库绘制网络拓扑图 在查看示例时http www highcharts com demo renderer http www highcharts com de
  • 设置滚动条拇指大小

    我正在尝试计算与 WPF 滚动条拇指元素大小相关的算法 拇指元素的大小可以使用Scrollbar ViewportSize属性 但又与Scrollbar Minimum and Scrollbar Maximum价值观 到目前为止我发现的是
  • android 从加速度计读数中删除重力

    我正在开发一个 Android 应用程序 我需要从加速度计读数中消除重力 我已经阅读了关于这个问题的多个讨论 我还找到了一个算法here http developer android com reference android hardwa
  • pandas 中给定日期的季度天数

    我创建了一个日期数据框 如下所示 import pandas as pd timespan 366 df pd DataFrame Date pd date range pd datetime today periods timespan
  • 在 Keras 中实现 Rprop 算法

    我正在尝试为 Keras 实现弹性反向传播优化器 link http www inf fu berlin de lehre WS06 Musterererkennung Paper rprop pdf 但具有挑战性的部分是能够根据每个单独的
  • 何时使用 SortedList 而不是 SortedDictionary

    这可能看起来与此重复question https stackoverflow com questions 935621 whats the difference between sortedlist and sorteddictionary
  • 为结构字段分配默认值[重复]

    这个问题在这里已经有答案了 我想为 Go 中的结构字段分配默认值 我不确定是否可能 但在创建 初始化结构的对象时 如果我没有为该字段分配任何值 我希望它从默认值分配 知道如何实现它吗 type abc struct prop1 int pr
  • 从两个向量中采样唯一对

    给定两个向量 a and b a letters 1 6 b letters 7 11 目标是使用以下方法对两列矩阵进行采样a and b 第一列应包含以下元素a使得每个元素a重复两次 第二列应包含以下元素b使得每个元素b也重复至少两次 还
  • 如何将 pandas 数据框显示为数据表?

    我想显示一个表 这是一个 pandas 数据框 作为数据表 https datatables net examples data sources dom html 在下面的简化示例中 我读取了用户提供的两个数字 它们确定了表格的行号和列号
  • 如何在 CodeIgniter 中获取 show_error() 来加载视图?

    我需要在所有页面中加载头部视图和脚部视图 但show error使用自己的完整模板 它在加载此模板后停止执行 因此如果我愿意 页脚甚至不会加载 我应该重写这个方法还是有其他方法 所以 我就是这样做的 而且效果非常好 我延长了CI Excep
  • 为什么元胞数组中的尾随逗号是有效的 Matlab 语法?

    今天我很惊讶地发现 A 1 2 3 and B 1 2 3 都是 MATLAB 中的有效语法 我原以为第二个语句会产生错误 据我所知 它们产生相同的单元阵列 all A B 返回真 允许使用第二种语法有什么原因吗 这是解析器中的错误吗 是A