【问题标题】:Weird behaviour for colon operator with arrays [duplicate]带有数组的冒号运算符的奇怪行为[重复]
【发布时间】:2019-12-06 13:49:43
【问题描述】:

我正在研究我找到的 Octave 函数的代码,并且发现了冒号运算符的奇怪用法。我在文档或 MathWorks 官方博客中找不到这种行为的解释(例如 Colon Operator

假设我们有几个向量:

>> a=[1,2,3]
a =
   1   2   3
>> b=[7,8,9]
b =
   7   8   9

现在如果你使用冒号运算符,你有:

>> a:b
ans =
   1   2   3   4   5   6   7

经过几次尝试我明白的是,上面的用法相当于:

>> a(1):b(1)
ans =
   1   2   3   4   5   6   7

我的假设正确吗?
某处有一些文档吗?

【问题讨论】:

  • 在 MATLAB 中,可以重现相同的行为。
  • 你会在hg.octave.org/octave/file/tip/libinterp/octave-value/…中找到实现,只取base、increment和limit的第一个元素
  • 注意重复:这确实是相同的根本原因。但是,副本不要求(因此其答案未提及)八度语法。这恰好是完全相同的(请参阅我的答案),因为 Octave 旨在成为 MATLAB 克隆。
  • @Adriaan GNU Octave 并非旨在成为 MATLAB 克隆。用户和贡献者看到了相似之处并提供了补丁,使他们能够在 Octave 中运行 MATLAB 代码。今天的目标是不破坏与 MATLAB 的兼容性,但 Octave 仍然具有 MATLAB 中没有的独特元素

标签: arrays matlab octave operator-keyword colon


【解决方案1】:

其实官方MATLAB documentation on colon有记载:

j — 开始操作数
实标量
开始操作数,指定为实数标量整数值fi 对象或内置数字类型。

如果您指定非标量数组,MATLAB 将 j:i:k 解释为 j(1):i(1):k(1)

所以是的,它确实做了你提到的数组语法,取向量的第一个元素。

Octave 遵循此实现,请参阅 the official source code(感谢 Andy for finding this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2011-03-13
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多