【问题标题】:How to understand the meaning of Matlab 'end' operator inside expression parameters [duplicate]如何理解表达式参数中的Matlab'end'运算符的含义[重复]
【发布时间】:2015-08-09 11:19:56
【问题描述】:

我要调整一个matlab脚本,这段代码有问题

if isOk()
    h = h(1+limit:end-limit, 1+limit:end-limit, :);
    limit= 0;
end

很遗憾,我不明白如何阅读表达式

 h = h(1+limit:end-limit, 1+limit:end-limit, :);

里面end操作符是什么意思?

【问题讨论】:

  • mathworks.com/company/newsletters/articles/… 并从 读取特殊的end 运算符是引用v 的最后一个元素的简单速记方式
  • @CST-Link 谢谢所以如果a:end 意味着从一个到最后...为什么, : 作为表达式的第三个参数? : 单独作为参数应该是什么意思?
  • 尝试来自 CST-Link se.mathworks.com/company/newsletters/articles/… 的链接。我重复一遍,以防万一。发送链接是因为它们应该被读取。整篇文章不应超过 5 分钟。
  • @NicoLorio 在上面的链接中,从 下标位置中的单个:1:end 的简写符号,通常用于选择整行或整列 .附:帮助中都有说明,您只需要耐心阅读即可。 :-)
  • @NicoLorio 考虑一下,为什么不直接尝试一下:A = [11,12,13;21,22,23;31,32,33], A(1:end,1:2), A(1,:)。你不妨试试这个A(:)

标签: matlab


【解决方案1】:

end 运算符只是length(var) 的简写。您甚至可以执行 var(1:end/2) 之类的操作来获取变量的前半部分。 对于超过 1 个维度,end 运算符充当size(var, x),其中x 是当前维度。

注意: Matlab 使用从零开始的索引,即访问array(length(array)) 实际上是正确的。因此end 与变量大小的关系是正确的,因为它是变量的最后一个索引,其中变量具有从一开始的索引。

所以在 Matlab 中你甚至可以编写类似的东西

a= rand(4,8); a(1:end/2, 1:end/2);

如果你完全离开,只输入a(:)(即在: 之前和之后什么都没有,那么你的意思是1:end

(:) ==> (1:end)

【讨论】:

  • 您甚至可以在函数中使用end 来引用外部数组(x(1:min(end,4)))。见stackoverflow.com/questions/23016606/…
  • 如果您说end 是给定维度的最后一个索引的简写,我认为您可能会避免来自其他编程语言的人的潜在混淆。将endsize 关联起来可能会误导习惯于从零开始索引的人认为最后一个索引是end-1
  • 感谢您的评论,我刚刚编辑了帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2012-02-28
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多