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

相关推荐
wheeldown2 小时前
【数学建模】数据预处理入门:从理论到动手操作
python·数学建模·matlab·python3.11
小白的高手之路8 小时前
Matlab中的积分——函数int()和quadl()
matlab
机器学习之心10 小时前
PINN物理信息神经网络用于求解二阶常微分方程(ODE)的边值问题,Matlab实现
人工智能·神经网络·matlab·物理信息神经网络·二阶常微分方程
liulilittle13 小时前
Unix/Linux 平台通过 IP 地址获取接口名的 C++ 实现
linux·开发语言·c++·tcp/ip·unix·编程语言
WangYan202215 小时前
MATLAB 2023a深度学习工具箱全面解析:从CNN、RNN、GAN到YOLO与U-Net,涵盖模型解释、迁移学习、时间序列预测与图像生成的完整实战指南
深度学习·matlab·matlab 2023a
迎风打盹儿15 小时前
均匀圆形阵抗干扰MATLAB仿真实录与特点解读
matlab·信号处理·抗干扰·均匀圆阵·波束合成
hqyjzsb15 小时前
2025职场进阶:B端产品经理必备的计算机专业技能精要
大数据·开发语言·人工智能·产品经理·编程语言·caie
科技树支点1 天前
无GC的Java创新设计思路:作用域引用式自动内存管理
java·python·go·web·编程语言·编译器
数维学长9861 天前
【全网最全】《2025国赛/高教杯》C题 思路+代码python和matlab+文献 一到四问 退火算法+遗传算法 NIPT的时点选择与胎儿的异常判定
开发语言·算法·matlab
dlraba8021 天前
用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
开发语言·matlab