Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的

文章目录

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/


一、前言

在早期的计算机科学中,数组索引从 1 开始是很常见的。例如,Fortran 和 Pascal 等编程语言也采用了从 1 开始的索引。

这种索引方式在数学和统计学中也很常见,因为它更符合人类的思维习惯。人们通常将第一个元素标记为 1,而不是 0。

Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的。


二、主要内容

Matlab 的数组索引从 1 开始,并且是左闭右闭的,这是由于 Matlab 的设计哲学和历史原因所决定的。

  • 数学习惯:Matlab 的设计者选择了从 1 开始的索引,以与数学中常见的表示方式保持一致。在数学中,我们通常使用自然数(1、2、3...)来表示对象的顺序或位置,而不是从 0 开始。因此,将数组索引从 1 开始可以更直观地与数学概念对应。

  • 向后兼容性:Matlab 最初是为数值计算和科学工程应用而设计的,早期版本的 Matlab 使用从 1 开始的索引。为了保持向后兼容性,Matlab 在后续版本中也保留了这种索引方式。

  • 易读性和易用性:从 1 开始的索引可以使代码更易读和易用。对于非专业编程人员和初学者来说,从 1 开始的索引更符合直觉,减少了索引偏移的困扰。

  • 与其他编程语言的差异 :虽然大多数编程语言(如 C、Python 和 Java)使用从 0 开始的索引,但 Matlab 选择了与它们不同的索引方式。这可能会导致在从其他语言切换到 Matlab 时需要注意索引的差异。此外,Matlab 的数组索引必须为正整数或逻辑值。而在 Python 编程语言中,可以有负数索引。负数索引表示从右边往左数,最右边的元素的索引为 -1,倒数第二个元素为 -2,依次类推。

代码测试如下:

go 复制代码
>> myArray = [1, 2, 3, 4, 5]

myArray =

     1     2     3     4     5

>> myArray(1:3)

ans =

     1     2     3

>> myArray(4)

ans =

     4

>> myArray(5)

ans =

     5

>> myArray(-1)
数组索引必须为正整数或逻辑值。

Matlab 的数组索引从 1 开始,这是因为 Matlab 的设计者们决定遵循了数学和工程领域的传统。在这些领域中,序列和集合通常从 1 开始编号,而不是从 0 开始。这种选择使得 Matlab 对于非计算机科学背景的人来说更加直观和易于理解。另一方面,Matlab 的切片索引是左闭右闭的,也就是说,当你指定一个范围时,比如 A(1:3),你会得到数组 A 中的第 1、2、3 个元素。这与 Python 等其他语言的左闭右开(包含开始索引,但不包含结束索引)的方式不同。这种设计也是为了符合数学和工程领域的习惯,使得结果更符合直觉。

总的来说,Matlab 的这些设计选择都是为了使其更适合其主要用户群体:工程师和科学家。这些用户可能没有深厚的计算机科学背景,但他们需要一个强大的工具来进行数值计算和数据分析。对于他们来说,从 1 开始的索引和左闭右闭的切片方式更符合他们的直觉和习惯。

R 语言的设计者主要是统计学家和数据科学家,他们的目标是创建一个对于统计分析和图形表示非常有用的工具。在这个背景下,让数组索引从 1 开始是有意义的,因为这更符合非程序员,特别是数学家和统计学家的直觉。在数学和统计学中,序列通常是从 1 开始的,而不是从 0 开始。此外,R 语言的设计者也受到了其他一些从 1 开始索引的编程语言的影响,如 Fortran。Fortran 是一种早期的科学计算语言,它的数组索引也是从 1 开始的。R 语言的设计者借鉴了 Fortran 的这个特性。

r 复制代码
> vector1 <- c(1,2,3,4,5)
> vector1
[1] 1 2 3 4 5
> vector1[1:3]
[1] 1 2 3
> vector1[4]
[1] 4
> sample(vector1, 2)
[1] 3 1
> vector1[2:4.5]
[1] 2 3 4
> vector1[-1]
[1] 2 3 4 5
> vector1[-3]
[1] 1 2 4 5

至于切片索引是左闭右闭的,这也是为了符合大多数人的直觉。在日常生活中,我们通常会认为一个区间包括其开始和结束的点。例如,如果我们说 "从 1 点到 3 点",我们通常会认为这个时间段包括 1 点、2 点和 3 点。同样,如果我们说 "第 1 页到第 3 页",我们通常会认为这包括第 1 页、第 2 页和第 3 页。所以,R 语言的切片索引是左闭右闭的,这是为了让代码更容易理解,更符合大多数人的直觉。注意一点,R 语言中可以有负整数索引向量,但这种索引向量是指定被排除的元素而不是包括进来

  • x[-1, ] 表示取出矩阵 x 的除了第一行元素外的其他元素。
  • vector1[-3] 表示取出向量 vector1 的除了第三个元素外的其他元素。

总的来说,R 语言的数组索引从 1 开始和切片索引是左闭右闭的设计是由于历史和兼容性的原因,并且也符合统计学和数据分析领域的习惯。这些设计决策使得 R 语言在数据分析和统计建模方面更加直观和易用。


三、小结

Matlab 和 R 语言的数组索引都是从 1 开始,并且是左闭右闭的

Matlab 的数组索引必须为正整数或逻辑值。而在 Python 编程语言中,可以有负数索引。负数索引表示从右边往左数,最右边的元素的索引为 -1,倒数第二个元素为 -2,依次类推。

R 语言中可以有负整数索引向量,但这种索引向量是指定被排除的元素而不是包括进来。

相关推荐
Dev7z14 分钟前
基于MATLAB小波变换的音频水印算法研究与实现
开发语言·matlab·音视频
cici158741 小时前
MATLAB/Simulink单相光伏并网逆变器仿真
开发语言·matlab
Dev7z1 小时前
基于MATLAB小波分析的图像增强算法及其仿真实现
开发语言·matlab
机器学习之心1 小时前
MATLAB基于极差法和灰色关联分析的40Cr零件内孔珩磨参数优化
matlab·灰色关联分析
aini_lovee2 小时前
基于UERD算法的JPEG图像隐写MATLAB实现
开发语言·算法·matlab
Dev7z4 小时前
基于MATLAB的风向和天气条件下污染物扩散模拟与可视化系统
人工智能·算法·matlab
tyatyatya14 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
kaikaile199514 小时前
基于遗传算法的车辆路径问题(VRP)解决方案MATLAB实现
开发语言·人工智能·matlab
listhi52016 小时前
基于改进SET的时频分析MATLAB实现
开发语言·算法·matlab
chao18984420 小时前
MATLAB 实现声纹识别特征提取
人工智能·算法·matlab