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

相关推荐
jk_1018 小时前
MATLAB中characterListPattern函数用法
开发语言·matlab
恩泽君1 天前
Matlab总提示内存不够用,明明小于电脑内存
开发语言·matlab
机器学习之心1 天前
回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测
matlab·回归·多输入单输出回归预测·cnn·tcn-bigru·时间卷积双向门控循环单元
Better Rose1 天前
【数学建模美赛速成系列】O奖论文绘图复现代码
数学建模·matlab
kuan_li_lyg1 天前
ROS2 与机器人视觉入门教程(ROS2 OpenCV)
开发语言·人工智能·opencv·计算机视觉·matlab·机器人·ros
matlabgoodboy2 天前
matlab程序代编程写做代码图像处理BP神经网络机器深度学习python
图像处理·深度学习·matlab
jk_1012 天前
MATLAB中regexptranslate函数用法
开发语言·mysql·matlab
freexyn3 天前
Matlab自学笔记四十五:日期时间型和字符、字符串以及double型的相互转换方法
开发语言·笔记·matlab
机器学习之心3 天前
SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现
matlab·分类·数据挖掘
糖炒栗子要加糖3 天前
imread和jpeg_read在MATLAB中处理图像时的不同
开发语言·matlab