Arrays 为什么matlab有基于1的索引

Arrays 为什么matlab有基于1的索引,arrays,matlab,indexing,Arrays,Matlab,Indexing,我以前用Java和Python编程,但最近开始用MATLAB做很多东西(特别是计算机视觉算法) 然而,MATLAB的数组索引是从1开始的,而不是从0开始的,这是我迄今为止遇到的几乎所有编程语言的标准 基于0的索引对我有意义的原因如下: 在我见过的每个处理器中,地址索引都以0x00000000开始,比如在8位处理器中,如果我想保存5个数字,它们将存储在地址0x00000000到0x00000004中。因此,在编程语言中从0开始建立索引是有意义的 当我在寻找这个问题的时候,我发现它是有用的 对我来说

我以前用Java和Python编程,但最近开始用MATLAB做很多东西(特别是计算机视觉算法)

然而,MATLAB的数组索引是从1开始的,而不是从0开始的,这是我迄今为止遇到的几乎所有编程语言的标准

基于0的索引对我有意义的原因如下: 在我见过的每个处理器中,地址索引都以0x00000000开始,比如在8位处理器中,如果我想保存5个数字,它们将存储在地址0x00000000到0x00000004中。因此,在编程语言中从0开始建立索引是有意义的

当我在寻找这个问题的时候,我发现它是有用的


对我来说,它不是一个非常方便的符号,可能是因为我以前用其他语言编写代码。但我仍然不明白为什么MATLAB(甚至现在的Julia)有一个基于1的数组索引,它提供了什么优势。有人能列出它的优点吗?

Matlab的目的是让那些还没有学会编码的人可以使用编程语言的功能。对于不熟悉编程的人来说,索引从0开始可能是常见的错误源,而Matlab的全部目的是让人们能够将他们理解的数学应用到他们需要解决的问题上,而不需要太多额外的知识

Matlab用于的大多数任务,例如物理和工程,在大多数文献中使用从1开始的索引约定,因此在这些领域工作的人不需要通过从所有内容中减去1来转换他们的算法

除此之外,Matlab是“矩阵实验室”的缩写,在数学中,惯例通常是从1开始对矩阵进行索引,因此它们遵循这个惯例是有意义的


为什么从0开始是有意义的,你的理由很好,但是像matlab这样的高级语言的目的是模糊用户不需要知道的方面。

为什么它有基于1的索引?历史原因。(决定如此)。这可能与基于1的索引是矩阵表示法的惯例有关

为什么它不实现基于0的索引呢? 要不要来点

特别是,请查看Cleve Moler(MATLAB的创建者)和Steve Lord(MathWorks工程师)的评论。经过多次交流,没有实施补充的基于0的索引的基本理由(至少在2001年)并非出于任何哲学或兼容性原因,尽管它最初是作为向后兼容性的论点,但因为更新MATLAB内置函数需要付出太多的努力:

我同意可以在MATLAB中添加基于零的索引, 使用新的表示法或重载所有 现有的索引符号。它可以在同一环境中向后兼容 感觉不知道或不使用新东西的旧代码仍然会 工作

但这里有一个关键点:我们现有的代码都无法使用 新对象。你无法策划它;你无法打印它;你 当然不能用它做任何矩阵运算。是的,随着时间的推移, 一切都可以重写来处理扩展,但是 这是我们想要避免的。这就像是调幅和调频收音机——两个 系统生活在同一个盒子中,但具有独立性 底层技术

--克利夫摩尔
moler@mathworks.com


翻译:他们不想写所有新的绘图、打印等例程。

MAT(rix)实验室(演讲室)通常遵循数学/线性代数惯例,而不是计算机科学惯例。对于矩阵,第一个元素,即左上角的元素,是(1,1)元素,而不是(0,0)元素,因此是基于1的索引,而不是基于0的索引。我相信这与MATLAB的原始基础是用Fortran编写的有关,Fortran也有基于1的索引。这个问题已经在Usenet上被打得死去活来,所以谷歌搜索它应该会透露更多细节。不管怎么说,我投票以意见为基础结束,因为真正的答案在于克里夫·莫勒的头脑。即使有人提出了一个权威性的参考,说明为什么会出现这种情况,这个问题仍然是离题的。同时,如果你要使用MATLAB,要习惯并处理它;这就是我们其他人所做的。在一个数字列表中,比如45,17,94,37,我认为列表中的第一个数字是45。从概念上讲,谈论第零个数字对我来说没有什么意义。仅出于这个原因,我就喜欢基于1的索引。正如Phil所说,这反映了数学符号,这是Matlab的主要用途。我实际上读了“漂亮的光线阅读”。讨论基于0和1的索引的重要性是一个非常有趣的话题。但遗憾的是,链接已断开。该页面现在只显示“截至2017年12月,新闻阅读器应用程序已关闭。”@张实唯 更新链接