matlab学习笔记:第五章5.3.3字符向量元胞数组的综合练习

embedded/2024/11/28 2:54:19/

案例1:

请将每行信息重新格式化为“姓名, 电话号码, 电子邮件”的字符向量形式,并保存到元胞数组s中(注意,第二行有一个vip1的额外备注,这个备注不需要出现在s中);接下来使用换行符连接s中的各行,得到字符向量ss,并输出ss。s1为:

'王大锤 18612345678@xyz.com 18612345678 '                                                                               ' 16565432198 lvbu66666@qq.com 吕奉先 (vip1) '                                                                           ' 清风 qingfeng_69999@sina.com 15522334455 '                                                                  'liu_liuliu@hust.edu.cn 胡桃 027-66668888 '                                                                                        '东皇太一 5566dhuang@wzry.com 010-87654321 '   

load data_5_3_3.mat
S = { };
s = strtrim(cellstr(s1))
for i = 1:length(s)s_1 = strsplit(s{i})  %把每行拆分成三个元胞数组s_2 = cell(1,3)         %空的元胞数组,储存每行排列好的数据for j = 1:length(s_1)   s_3 = s_1{j}if all(isletter(s_3))s_2{1} = s_3elseif sum(isstrprop(s_3,'digit'))==11 && ~any(s_3 =='@')s_2{2} = s_3elseif any(s_3 =='@')s_2{3} = s_3endend    S{i} = strjoin(s_2,' , ')
end
S
SS = strjoin(S,'\n')

案例2:

假设你是你们班的班长,你需要了解班上同学的兴趣爱好,以便更好地组织活动和建立兴趣小组。现在你收集了 40名同学的兴趣爱好信息,并记录在元胞数组s2中。s2中每个数据都是字符向量,包含由中文顿号分隔的多个兴趣爱好,部分同学的兴趣列表中包含了“其他”作为一个额外的选项。
请你求出任意两名同学共有的兴趣爱好数量,并将结果保存到大小为40行40列的矩阵num 中,其中 num(ii, jj)表示第ii名同学和第ji名同学的共同爱好数量。显然,num 是一个对称矩阵,即 num(jj, ii)和 num(ii,jj)的结果相同。(注意:统计不同同学的兴趣爱好时,可以忽略“其他”这个选项,因为它可能涵盖的兴趣范围过于广泛) 

load('data_5_3_3.mat')
n = length(s2);
num = zeros(n);
for ii = 1:nfor jj = 1:iiif ii == jjnum(ii,jj) = length(strsplit(s2{ii},'、'));elses_ii = strsplit(s2{ii},'、');s_jj = strsplit(s2{jj},'、');g = intersect(s_jj,s_ii);g(strcmp(g,'其他')) = [];num(ii,jj) = length(g);num(jj,ii) = length(g);            endend
end
num

案例3:

变量s3中保存着2023年高教社杯全国大学生数学建模竞赛获奖名单,它是个长度为59993 的字符向量。我们的目标是统计获得本科组一等奖的 299支队伍中,各地区的数量和出现的频率。请将结果保存到元胞数组c中,c有三列:第一列为各地区的名称,第二列为各地区获得本科组一等奖的队伍数量,第三列为相应的频率(即各地区获得一等奖的队伍数量除以获得本科组一等奖的所有队伍数量 299)。此外,请根据获奖数量将元胞数组c按照降序排列,即获奖数量多的地区应排在前面,并将排序后的结果保存在元胞数组cc中。

load('data_5_3_3.mat');
s = strsplit(s3,newline)';
ss = s(14:316);       %提取需要的数据
ydj = cell(299,1);   %初始化一个存储一等奖的元胞数组
j = 0;       %新索引号
for i =1:length(ss)tem = ss{i};if isstrprop(tem(1),'digit')j = j + 1;ydj{j} = tem;elseydj{j} = [ydj{j},tem];end
end
dq = cell(299,1);   %初始化地区的元胞数组
for i = 1:length(ydj)tem = strsplit(ydj{i}); %按空格拆分一等奖的每行信息,发现第三列是地区dq{i} = tem{3};         %将第三列储存在地区元胞数组中
end
dq
% tabulate函数需要统计和机器学习工具箱Statistics and Machine Learning Toolbox
c = tabulate(dq) 
cc = sortrows(c,2,'descend')

拓展:tabulate

x1 = randi([-5,3],1,6)
tabulate(x1)
t1 = tabulate(x1)       %数值型升序排列x2 = {'yes','no','yes','yes','and'};
tabulate(x2)
t2 = tabulate(x2)       %字符型按照出现的顺序排列x3 = [5 2 4 4 5 5 100];
tabulate(x3)            %会将1-5的数字全部计算频数,没出现的是0
tabulate(string(x3))    %将数值型转成字符型,这样就会按照出现的顺序排列
tabulate(categorical(x3))%转换为分类数组x = {'yes','no','yes','yes','and','no','or'};
% 使用unique函数找出x中的唯一值,同时获得每个元素在唯一值数组中的索引ind
[Value, ~, ind] = unique(x,'stable') % 加'stable'保持原文本出现的先后顺序
ind == 1:length(Value)
Count = sum(ind == 1:length(Value)) % 计算每个唯一值在x中出现的次数
Percent = Count/sum(Count)*100  % 计算每个唯一值出现的百分比
t = cell(length(Value),3) % 初始化一个元胞数组用于保存最终结果
% 将Value、Count和Percent的值分别填充到元胞数组t的相应位置
t(:,1) = Value  % 第一列保存唯一值(这里可以不对Value转置,大小匹配就行)
t(:,2) = num2cell(Count)  % 第二列保存每个值的计数
t(:,3) = num2cell(Percent)  % 第三列保存每个值的百分比
disp(t)  % 输出结果t
% 和内置函数的结果相同
t2 = tabulate(x)
isequal(t,t2)
[t{:,3}] - [t2{:,3}]    %浮点数计算误差

http://www.ppmy.cn/embedded/141073.html

相关文章

js:基础

js是什么 JavaScript是一种运行在客户端的编程语言,实现人机交互的效果 js只要有个浏览器就能跑 js可以做网页特效、表单验证、数据交互、服务端编程 服务端编程是前端人拿他们特有的后端语言node.js来干后端干的事情 js怎么组成 JavaScriptECMAScript(语言基…

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统,是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景:多人开发管理代码;异地开发,版本管理,版本回滚。 Git 的三个区域&a…

设计模式之 命令模式

命令模式(Command Pattern)是行为型设计模式之一,它将请求(或命令)封装成一个对象,从而使用户能够将请求发送者与请求接收者解耦。通过命令模式,调用操作的对象与执行操作的对象不直接关联&…

浏览器漫谈HTML--2.2从表单标签看vue的响应式系统 理论+实战

表单标签的双向绑定是一个很有亮点的功能。在不同框架中他实现这个功能大同小异,这里我们介绍几个常见的框架中他是如何实现双向绑定的。 原生的input输入框是没有双向绑定的功能的。取而代之的,它的input上有一个event对象,这个对象中有一个…

Linux服务器驱动安装

Linux服务器驱动安装(ubuntu为例) 驱动安装 在 Ubuntu 上安装 NVIDIA 驱动,主要可以通过以下几种方式完成。以下步骤适用于支持 NVIDIA GPU 的系统。 自动安装手动安装特定版本PPA安装 1. 自动安装推荐驱动(简单方法&#xff0…

java 打印对象所有属性的值 循环

在Java中,如果你想要打印一个对象的所有属性值,可以使用反射(Reflection)来获取对象的所有字段,并循环遍历这些字段以打印它们的值。以下是一个示例代码,展示了如何实现这一点: 示例类 假设我…

使用argo workflow 实现springboot 项目的CI、CD

文章目录 基础镜像制作基础镜像设置镜像源并安装工具git下载和安装 Maven设置环境变量设置工作目录默认命令最终dockerfile 制作ci argo workflow 模版volumeClaimTemplatestemplatesvolumes完整workflow文件 制作cd argo workflow 模版Workflow 结构Templates 定义创建 Kubern…

Linux各种并发服务器优缺点

本文旨在介绍针对“无并发C/S模型”改进的方法总结以及各种改进方法的优缺点,具体函数的实现并不介绍。 1. 无并发C/S模型 创建服务器流程分析: socket()创建服务器的监听套接字bind()将服务器给服务器的监听套接字绑定IP地址和Port端口号listen()设置…