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,依次类推。

代码测试如下:

>> 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 的这个特性。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942578.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除

GitLab停止为中国大陆、香港和澳门地区提供服务&#xff0c;要求用户在60天内迁移账号&#xff0c;否则将被删除。这一事件即将引起广泛的关注和讨论。以下是对该事件的扩展信息&#xff1a; 1. 背景介绍&#xff1a;GitLab是一家全球知名的软件开发平台&#xff0c;提供代码托…

瑞吉外卖项目学习笔记(八)修改菜品信息、批量启售/停售菜品

瑞吉外卖项目学习笔记(一)准备工作、员工登录功能实现 瑞吉外卖项目学习笔记(二)Swagger、logback、表单校验和参数打印功能的实现 瑞吉外卖项目学习笔记(三)过滤器实现登录校验、添加员工、分页查询员工信息 瑞吉外卖项目学习笔记(四)TableField(fill FieldFill.INSERT)公共字…

C++小碗菜之五:关键字static

“一个人的命运啊&#xff0c;当然要靠自我奋斗&#xff0c;但也要考虑到历史的行程。” ——2009年4月23日在视察中国联合工程公司时的讲话 目录 ​编辑 前言 static在局部作用域中的作用 给出例子&#xff1a; 修改上面给出的例子&#xff1a; 为什么不使用全局变量…

开源云原生数据仓库ByConity ELT 的测试体验

ByConity 是分布式的云原生SQL数仓引擎&#xff0c;擅长交互式查询和即席查询&#xff0c;具有支持多表关联复杂查询、集群扩容无感、离线批数据和实时数据流统一汇总等特点。 ByConity 是一个云原生的、高性能的实时数据仓库&#xff0c;而 ELT&#xff08;Extract&#xff0c…

Linux -- 线程的优点、pthread 线程库

目录 线程的优点 pthread 线程库 前言 认识线程库 简单验证线程的独立栈空间 线程的优点 与进程之间的切换相比&#xff0c;线程之间的切换需要操作系统做的工作要少得多。 调度进程时&#xff0c;CPU 中有一个 cache&#xff08;缓存&#xff0c;提高运行效率&#xff0…

数字IC前端学习笔记:脉动阵列的设计方法学(四)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 引言 脉动结构&#xff08;也称为脉动阵列&#xff09;表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则…

观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?

大家好&#xff0c;我是锋哥。今天分享关于【观察者模式和发布-订阅模式有什么异同&#xff1f;它们在哪些情况下会被使用&#xff1f;】面试题。希望对大家有帮助&#xff1b; 观察者模式和发布-订阅模式有什么异同&#xff1f;它们在哪些情况下会被使用&#xff1f; 1000道 …

【LeetCode】726、原子的数量

【LeetCode】726、原子的数量 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 遇到 ( 括号, 则递归计算子问题 遇到大写字母, 或遇到 ( 括号, 则清算历史, 并开始新的记录 记录由两部分组成: 大写字母开头的 …

【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录前言一、Select 执行位置二、返回一个字段和多个字段三、单表返回DTO四、多表返回DTO4.1 手动DTO4.2 实体自动映射14.…

WebRTC服务质量(11)- Pacer机制(03) IntervalBudget

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…

分布式协同 - 分布式事务_2PC 3PC解决方案

文章目录 导图Pre2PC&#xff08;Two-Phase Commit&#xff09;协议准备阶段提交阶段情况 1&#xff1a;只要有一个事务参与者反馈未就绪&#xff08;no ready&#xff09;&#xff0c;事务协调者就会回滚事务情况 2&#xff1a;当所有事务参与者均反馈就绪&#xff08;ready&a…

计算机图形学知识点汇总

一、计算机图形学定义与内容 1.图形 图形分为“图”和“形”两部分。 其中&#xff0c;“形”指形体或形状&#xff0c;存在于客观世界和虚拟世界&#xff0c;它的本质是“表示”&#xff1b;而图则是包含几何信息与属性信息的点、线等基本图元构成的画面&#xff0c;用于表达…

Nginx区分PC端和移动端访问

在使用Nginx时&#xff0c;可以通过$http_user_agent变量来判断用户访问的客户端类型&#xff0c;从而提供不同的内容或服务。下面是一个基于$http_user_agent变量来判断是否为PC访问的Nginx配置示例。 1. 理解$http_user_agent变量的含义及其在Nginx中的用途 $http_user_agen…

方法。。。

1. 方法概述 1.1 方法的概念 ​** 方法&#xff08;method&#xff09;是程序中最小的执行单元** 注意&#xff1a; 方法必须先创建才可以使用&#xff0c;该过程成为方法定义方法创建后并不是直接可以运行的&#xff0c;需要手动使用后&#xff0c;才执行&#xff0c;该过程…

jasypt原理

jasypt原理 一、背景知识二、原理分析1、(uml中蓝色)加载Encryptor、Detector和Resolver2、(uml中红色)加载EnableEncryptablePropertiesBeanFactoryPostProcessor3、(uml中绿色)解密过程 以jasypt 1.14为例 一、背景知识 需要了解spring的加载顺序&#xff1a; step1:主要是…

【UE5 C++课程系列笔记】13——GameInstanceSubsystem的简单使用

目录 概念 基本使用案例 效果 步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem&#xff0c;它与 GameInstance 紧密关联&#xff0c;旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间&#xff0c;一个 GameInstance 可以包含多个 UGa…

SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

本篇博客将深入探讨 MyBatis-Plus 的三个核心功能&#xff1a;条件构造器、自定义 SQL 和 Service 接口的基本用法。通过对这些功能的学习和掌握&#xff0c;开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。 目录 前言 条件构造器 自定义SQL Service接口基本用法 总结…

我的 2024 年终总结

2024 年&#xff0c;我离开了待了两年的互联网公司&#xff0c;来到了一家聚焦教育机器人和激光切割机的公司&#xff0c;没错&#xff0c;是一家硬件公司&#xff0c;从未接触过的领域&#xff0c;但这还不是我今年最重要的里程碑事件 5 月份的时候&#xff0c;正式提出了离职…

STM32-笔记11-手写带操作系统的延时函数

1、为什么带操作系统的延时函数&#xff0c;和笔记10上的延时函数不能使用同一种&#xff1f; 因为笔记10的延时函数在每次调用的时候&#xff0c;会一直开关定时器&#xff0c;而在FreeRTOS操作系统中&#xff0c;SysTick定时器当作时基使用。 时基是一个时间显示的基本单位。…

人工智能与物联网:从智慧家居到智能城市的未来蓝图

引言&#xff1a;未来已来&#xff0c;智能化的世界 想象一下&#xff0c;一个早晨&#xff0c;智能闹钟根据你的睡眠状态自动调整叫醒时间&#xff0c;咖啡机早已备好热腾腾的咖啡&#xff0c;窗帘缓缓拉开&#xff0c;迎接清晨的阳光。这不是科幻小说中的场景&#xff0c;而是…