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 语言中可以有负整数索引向量,但这种索引向量是指定被排除的元素而不是包括进来。

相关推荐
IT猿手17 小时前
基于强化学习的多算子差分进化路径规划算法QSMODE的机器人路径规划问题研究,提供MATLAB代码
算法·matlab·机器人
fie888921 小时前
基于MATLAB的转子动力学建模与仿真实现(含碰摩、不平衡激励)
开发语言·算法·matlab
机器学习之心21 小时前
基于GRU门控循环单元的轴承剩余寿命预测MATLAB实现
深度学习·matlab·gru·轴承剩余寿命预测
简简单单做算法1 天前
基于FFT粗估计和LS最小二乘法精估计的正弦信号参数估计和检测matlab仿真
matlab·最小二乘法·参数估计·fft粗估计·ls最小二乘法
kaikaile19951 天前
基于MATLAB的滑动轴承弹流润滑仿真程序实现
开发语言·matlab
Not Dr.Wang4221 天前
FIR数字滤波器设计的两种实现
matlab
3GPP仿真实验室1 天前
【MATLAB源码】CORDIC-QR :基于Cordic硬件级矩阵QR分解
开发语言·matlab·矩阵
民乐团扒谱机2 天前
【微实验】机器学习之集成学习 GBDT和XGBoost 附 matlab仿真代码 复制即可运行
人工智能·机器学习·matlab·集成学习·xgboost·gbdt·梯度提升树
Evand J2 天前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop
长安牧笛2 天前
反传统学习APP,摒弃固定课程顺序,根据用户做题正确性,学习速度,动态调整课程难度,比如某知识点学不会,自动推荐基础讲解和练习题,学习后再进阶,不搞一刀切。
python·编程语言