011_string_and_cell_in_Matlab中的字符串与元胞数组

Matlab中的字符串与元胞数组

1. 字符串

1.1 为什么

这两个东西拉在一起讲,是因为在2016a之前的Matlab中,要表示一个字符串的数组,只能用元胞数组。

最初的字符串在Matlab中的类型是字符,在Matlab中,一个字符就是一个长度为1的字符串,而一个字符串就是一个长度大于1的字符数组。这就造成,要表示一个字符串数组,就只能用元胞数组。因为Matrix只能是方阵……

所以当时我们要在一个图上画几条线,每条线的名字是一个字符串,就只能用元胞数组。

x = 1:10;
y = [x; x.^2; x.^3];
plot(x, y);
legends = {'y = x', 'y = x * x', 'y = x * x * x'};
legend(legends);

在这里插入图片描述

1.2 真正的字符串类型string

2016a之后,Matlab引入了字符串类型,string,这个类型的引入,使得我们可以直接用字符串数组来表示字符串数组了。

x = 1:10;
y = [x; x.^2; x.^3];
plot(x, y);
legends = ["y = x", "y = x * x", "y = x * x * x"];
legend(legends);

字符串类型的是"",字符类型是'',居然还挺有一致性的,考虑到Matlab所有变量都是默认数组。

1.3 字符(char) vs. 字符串(string)

所以,如果我们用class或者whos来查看一个字符串变量的类型,就有如下结果:

>> s1 = ['abc', 'efg']s1 ='abcefg'>> class(s1)ans ='char'

可以看到,一行的字符数组会被自动连接在一起,因为字符数组行向量是其本质。以前的时候,我们甚至就是用这种方式来进行字符串的拼接的。

>> s1'ans =6×1 char 数组'a''b''c''e''f''g'

而对于字符串数组,就不会这样了。

>> s2 = ["abcd", "efg"]s2 =1×2 string 数组"abcd"    "efg">> class(s2)ans ='string'

大部分处理字符串的函数都可以对这两个类型进行操作,例如strcatstrfind, strsplitreplace等等。这些函数总是优先返回字符数组。

1.4 格式化字符串

对于其它语言中常见的格式化字符串,Matlab中也有,sprintf函数。

a = 1;
b = 2;
c = 3;
s = sprintf('a = %d, b = %d, c = %d', a, b, c);
disp(s);
a = 1, b = 2, c = 3

2016a之后,Matlab又增加了一个compose函数,用来格式化字符串,这个函数对字符串和字符数组都适用,结果略有不同。可以通过帮助和文档查看具体的用法。

>> compose('%f', rand(3))ans =3×3 cell 数组{'0.278276'}    {'0.188147'}    {'0.088258'}{'0.303205'}    {'0.201239'}    {'0.414290'}{'0.284297'}    {'0.584602'}    {'0.494232'}>> compose("%f", rand(3))ans = 3×3 string 数组"0.074644"    "0.262734"    "0.416717""0.442903"    "0.118222"    "0.030380""0.637427"    "0.372898"    "0.547681"

2. 元胞数组

元胞数组,类似于别的语言中的List,可以存放不同类型的数据,也可以存放不同大小的数据。

2.1 创建元胞数组

元胞数组的字面量,用{}来表示。

a = {1, 2, 3};b = {1, 2, 3; 4, 5, 6};

元胞数组同样可以是多维的。

a = cell(2, 3, 4);

2.2 访问元胞数组

元胞数组提供了两种方式来访问元胞数组中的元素,一种是(),一种是{}()返回的是一个元胞数组,{}返回的是元胞数组中的元素。

a = {1, 2, 3};
b = a{1};
c = a(1);disp(b);
disp(c);
 1{[1]}

前者按照系统显示数组的约定,不显示[],后者{}中显示了[]。、

最后,元胞数组的列转换与数组是一致的,

a = {1, 2, 3};a(:)
ans =3×1 cell 数组{[1]}{[2]}{[3]}

而相应的,{:}会带来跟在命令行一次输入所有的元素,并用逗号隔开一样的效果。

>> a{:}ans =1ans =2ans =3>> 1,2,3ans =1ans =2ans =3

在这样的场景中可以作为右值对多个变量赋值。这与调用函数时,返回多个值的情况是一样的。

>> [x1,x2,x3] = a{:}x1 =1x2 =2x3 =3

2.3 元胞数组作为左值

元胞数组作为左值时,可以用{}来赋值,也可以用()来赋值。

a = {1, 2, 3};a{1} = rand(4);
a(2) = {rand(4)};
>> aa =1×3 cell 数组{4×4 double}    {4×4 double}    {[3]}

当然,跟前面的[x1,x2,x3] = a{:}一样,也可以用{:}来赋值。

a = {1, 2, 3};[a{:}] = deal(rand(4));
>> aa =1×3 cell 数组{4×4 double}    {4×4 double}    {4×4 double}

这个deal函数,是用来将一个值赋给多个变量的,这个函数在处理多个输出参数的时候,也是很有用的。它的参数可以是一个,此时就会拷贝到所有的输出上;也可以是多个,此时就会按照顺序赋值,要求两边逗号列表的元素个数相等。

例如:

a = {1, 2, 3};[a{:}] = deal(1, 2, 3);
>> aa =1×3 cell 数组{[1]}    {[2]}    {[3]} 

这就相当于[a{1}, a{2}, a{3}] = deal(1, 2, 3)

而采用()来访问,语义上会更简单,就是元胞数组的拷贝(右边为一个元素的元胞数组)或者逐个替换(左值和右值为长度相同的元胞数组)。

3. 结论

  1. Matlab中的字符串类型是string,字符串数组的字面量是"",字符数组的字面量是''
  2. Matlab中的元胞数组是一种特殊的数组,可以存放任意类型的数据,也可以存放不同类型的数据。
  3. 通过{:}可以得到一个逗号分开的列表。
  4. deal函数,可以用来将一个值赋给多个变量,也可以用来将多个值赋给多个变量。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sentinel原理及实践

Sentinel 是什么 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 为什么使用sentinel&…

解决前后端通信跨域问题

因为浏览器具有同源策略的效应。 同源策略是一个重要的网络安全机制,用于Web浏览器中,以防止一个网页文档或脚本来自一个源(域、协议和端口),获取另一个源的数据。同源策略的目的是保护用户的隐私和安全,防…

基于Spring Boot的在线学习系统的设计与实现

基于Spring Boot的在线学习系统的设计与实现 摘 要 在线学习系统是以大学传统线下教学方式不适应信息技术的迅速发展为背景,提高学习效率,解决传统教学问题,并且高效的实现教学信息化的一款软件系统。为了更好的实现对于教学和学生的管理&a…

FL Studio21.2.3中文版软件新功能介绍及下载安装步骤教程

FL Studio21.2中文版的适用人群非常广泛,主要包括以下几类: FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55981 FL Studio 21 Mac-安装包下载如下: https://wm.makeding.com/iclk/?zoneid55982 音乐制作人&#xff1a…

记录关于智能家居的路程的一个bug___Segmentation fault(段错误)

前言 其实发生段错误的情况有很多: 其实在项目的开发中最有可能的错误就是①和②,考虑到本项目数组用的比较少,所以主要是考虑错误①指针的误用。 有时候错误就是那么离谱,声音也算是一种设备??&#xff…

【安全用电管理系统的应用如何保证用电安全】Acrel-6000安科瑞智慧安全用电解决方案

政策背景 国家部委 ※2017年5月3日国务院安委会召开电气火灾综合治理工作视频会议,决定在全国范围内组织开展为期3年的电气火灾综合治理工作。 公安部领导 ※公安部副部长李伟强调:向科技要战斗力,加快推进“智慧消防”建设不断提升火灾防控…

大创项目推荐 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…

【LeetCode热题100】739. 每日温度(栈)

一.题目要求 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 二.题目难度…

pytest--python的一种测试框架--request请求加入headers

一、request headers中的cookie和session机制的作用与区别 Cookie 和 Session 是两种在客户端和服务器之间保持状态的技术。HTTP 协议本身是无状态的,这意味着服务器无法从上一次的请求中保留任何信息到下一次请求。Cookie 和 Session 机制就是为了解决这个问题。 …

【CASS精品教程】CASS11.0基于离散点创建三维地形(Tin、Grid、等高线)

文章目录 一、打开数据二、创建不规则三角网TIN三、创建等高线CONTOUR四、规则格网GRID五、专栏配套实验数据包下载一、打开数据 打开CASS11软件,点击【绘图处理】→【展野外测点点号】,选择实验数据(实验数据在文末有下载地址),如下图所示: 展点如下图所示(此数据为美国…

搜索与图论——Dijkstra算法求最短路

最短路算法 稠密图与稀疏图 n为点数,m为边数。m远小于n的平方为稀疏图,m接近n的平方为稠密图。 稀疏图用邻接表存,稠密图用邻接矩阵存 朴素版dijkstra时间复杂度为O(n^2),对于稠密图可以ac,但遇到稀疏图时会TLE。 dijkstra函数实…

蓝桥杯算法题-图形排版

题目描述 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi。   假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照图片顺序,在宽度 M 以内&…

「Android高级工程师」BAT大厂面试基础题集合-下-Github标星6-5K

C、 com.android.provider.contact D、 com.android.provider.contacts 11.下面关于ContentProvider描述错误的是()。 A、 ContentProvider可以暴露数据 B、 ContentProvider用于实现跨程序共享数据 C、 ContentProvider不是四大组件 D、 ContentP…

与webpack类似的工具还有哪些?区别?

文章目录 一、模块化工具二、详细对比RollupParcelSnowpackVitewebpack 参考文献 一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来&a…

stitcher类实现多图自动拼接

效果展示 第一组: 第二组: 第三组: 第四组: 运行代码 import os import sys import cv2 import numpy as npdef Stitch(imgs,savePath): stitcher cv2.Stitcher.create(cv2.Stitcher_PANORAMA)(result, pano) stitcher.st…

P-MapNet:Far-seeing Map Generator Enhanced by both SDMap and HDMap Priors

主页:homepage 参考代码:P-MapNet 动机与出发点 在感知系统中引入先验信息是可以提升静态元素感知网络的上限的,这篇文章对SD地图采用栅格化表示(也就是图像形式),之后用CNN网络去抽取栅格化SD地图的信息&…

[技术笔记] Flash选型之基础知识芯片分类

1、按照接口分类 分为 Serial串口Flash 和 Parallel并口Flash; 市场大量使用Serial Flash;价格便宜;已满足系统对数据读写速度的要求; Serial Flash已经可以代表 NOR Flash; 小知识: 1)在…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而,当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…

54 npm run serve 和 npm run build 输出的关联和差异

前言 通常来说 我们开发的时候一般会用到的命令是 “npm run serve”, “npm run build” 前者会编译当前项目, 然后将编译之后的结果以 node 的形式启动一个服务, 暴露相关业务资源, 因此 我们可以通过 该服务访问到当前项目 后者是编译当前项目, 然后做一下最小化代码的优…

(八)目标跟踪中参数估计(似然、贝叶斯估计)理论知识

目录 前言 一、统计学基础知识 (一)随机变量 (二)全概率公式 (三)高斯分布及其性质 二、似然是什么? (一)概率和似然 (二)极大似然估计 …