一、多个“规律命名”的文件

1.1 一次性读入多个“规律命名”的文件

eval(expression):将()中的字符串转换为matlab可执行语句;

考虑100个mat文件读入,命名格式为:

file1.mat,file2.mat,file3.mat...

1.1.1传统方式:

% 100个格式相同的语句
load file1.mat
load file2.mat
load file3.mat
...

1.1.2利用eval():

for i = 1:100eval('load', ' ', 'file', num2str(i), '.mat');
end

eval('load', ' ', num2str, '.mat');相当于把字符串‘load filei.mat;’通过eval()转化成了matlab可执行语句load filei.mat;就可以执行了。

1.1.3注意一个错误的想法:

for i = 1:100

load ['file', num2str(i), '.mat');

end

原因:load后面跟的不能是字符串,所以上述代码不可用。

2.2 利用循环创建多个“规律命名”的文件并储存

evalc(expression):将()中的字符串转换位matlab可执行语句并储存结果;

save(filename, 'variable', '-append'):

filename为保存路径;

variable是待储存变量,加‘’表示它已字符串方式放在save()语句;

'-append'表示往现有文件中添加,若有同名元素则替换。

2.3 实践例子

1、创建100个mat文件,命名格式为Matrix_i.mat

clc;
clear;
% 注意这里的文件存放路径
file_path = 'E:\CSDN\CodeForCSDN\MathorCup\Assess_File';
for i = 1:100% 矩阵Matrix内容为i这一个数,即变成了内容为[i]的1x1数组Matrix = [];Matrix = [Matrix, i];evalc(['Matrix_', num2str(i), '=', 'Matrix', ';']);filename = [file_path, '\Matrix_', num2str(i)];File_Name = ['Matrix_', num2str(i)];save(filename, File_Name);eval(['clear',' ', 'Matrix_', num2str(i), ';']);
end

结果:

2、把这100个文件读入Matlab工作区

clc;
clear;
file_path = 'E:\CSDN\CodeForCSDN\MathorCup\Assess_File';
for i = 1:100eval(['load', ' ', file_path, '\Matrix_', num2str(i)]);
end

结果:

3、将命名格式为”Matrix_i.mat“(i为1到100的所有整数)的文件读入,然后放在同一个file.mat文件中。

% 承接上一个程序
file_path = 'E:\CSDN\CodeForCSDN\MathorCup';
File_CMP = '\file.mat';
NaN = nan;
save([file_path, File_CMP], 'NaN');
for i = 1:100File_Name = ['Matrix_', num2str(i)];save([file_path, File_Name], File_Name, '-append');
end

结果

读到工作区看看

clc;
clear;
load E:\CSDN\CodeForCSDN\MathorCup\file

二、数组操作

2.1 不预定数组的大小

clc;
clear;
Num_Mat_Row = [];
Num_Mat_Col = [];
for i = 1:6Num_Mat_Row = [Num_Mat_Row, i];  % 注意这里是逗号Num_Mat_Col = [Num_Mat_Col; i];  % 注意这里是分号
end

结果

2.2 数组排序

sort():Matlab官方手册

sortrows(Matrix, rows):Matrix为待处理矩阵,rows为指定的列,语句含义为将矩阵Matrix的第rows列排序(默认升序),同时Matrix的行也随着rows的变化而变化,这一点和sort()有很大区别

2.3 取数组的行列

[Row,Col] = size(Matrix);

三、部分代码

% 修改建议:1、load哪一个文件;2、新建文件的路径Mfile_Nam是否修改;3、i从哪里开始
clc;
clear;
load E:\mathmodeling\Code\Data\ComData\Q2_11000\finger_tongzhi
i = 1;
[m, n] = size(finger_tongzhi);
Mfile_Nam = 'E:\mathmodeling\Code\Mfile\Hush_tongzhi_Cprs\Hash_table_Q2.mat';
ynzhh = 1;
save(Mfile_Nam, 'ynzhh');
for i = 1:11000% 索引矩阵Hash_table = zeros(size(5000, 360));rowIndexer = [];% i指代第几个指纹fingerprt_num = finger_tongzhi(i, 1);  % 读取表格中的指纹数量%% 指纹已经输入进来,则想办法确定指纹的中心位置,采用求全部数据平均值的方法X_Mid_Mat = zeros(size(1, fingerprt_num));Y_Mid_Mat = zeros(size(1, fingerprt_num));for totel_num = 1:fingerprt_numX_Mid_Mat(1, totel_num) = finger_tongzhi(i, 3 * totel_num - 1);Y_Mid_Mat(1, totel_num) = finger_tongzhi(i, 3 * totel_num);endX_Mean = mean(X_Mid_Mat);Y_Mean = mean(Y_Mid_Mat);X_NN = max(X_Mid_Mat) - min(X_Mid_Mat);Y_NN = max(Y_Mid_Mat) - min(Y_Mid_Mat);%%for j = 1:fingerprt_num  % 每个元素都做一次Core,第j个元素做Core% 想做Core是有条件的,考虑Core在靠近中间的位置Core_Num = j;Core_Begin = 3 * (Core_Num - 1) + 2;  % 第一列是指纹数量Core_X = finger_tongzhi(i, Core_Begin);Core_Y = finger_tongzhi(i, Core_Begin + 1);Judge_X = abs(Core_X - X_Mean);Judge_Y = abs(Core_Y - Y_Mean);if Judge_X < 0.25 * X_NN && Judge_Y < 0.25 * Y_NNelsecontinue;end%%Core_Sita = finger_tongzhi(i, Core_Begin + 2);% 建立中间矩阵存放旋转后的Support点Mid_Mat = zeros(size(1, n));% 统计y的值,求y的范围yn和ymin
%         Y_n_min = zeros(size(1, fingerprt_num));for k = 1:fingerprt_num  % 对每个细节点进行旋转和平移if j == kMid_Mat(1, 3 * (k - 1) + 2) = 0;  % Core_X改为0Mid_Mat(1, 3 * (k - 1) + 3) = 0;  % Core_Y改为0Mid_Mat(1, 3 * (k - 1) + 4) = 360;  % Core_Sita改为2picontinue;end% 读入支持点的原值Support_Begin = 3 * (k - 1) + 2;Support_X = finger_tongzhi(i, Support_Begin);Support_Y = finger_tongzhi(i, Support_Begin + 1);Support_Sita = finger_tongzhi(i, Support_Begin + 2);% 计算支持点改变后的值,并存入索引表Support_X_ = cosd(Core_Sita) * (Support_X - Core_X) + sind(Core_Sita) * (Support_Y - Core_Y);
%             Support_Y_ = -sind(Core_Sita) * (Support_X - Core_X) + cosd(Core_Sita) * (Support_Y - Core_Y);Support_Sita_ = round(Support_Sita - Core_Sita);if Support_Sita_ <= 0Support_Sita_ = Support_Sita_ + 360;end% 将变换后的值导入中间计算矩阵Mid_Mat(1, Support_Begin) = round(Support_X_);Mid_Mat(1, Support_Begin + 2) = Support_Sita_;
%             Y_n_min(1, k) = Support_Y_;end
%         Y_max = round(max(Y_n_min));
%         Y_min = round(min(Y_n_min));
%         Y_n = Y_max - Y_min;% 开始将中间矩阵的数据导入索引矩阵中for X_num = 1:fingerprt_numif X_num == jcontinue;endX_pos = 3 * (X_num - 1) + 2;Sita_pos = X_pos + 2;L = Mid_Mat(1, X_pos);
%             L = (Mid_Mat(1, X_pos) - 1) * Y_n + Y_min;% 对列索引赋值rowIndexer = [rowIndexer; L];% 对索引阵赋值[Row,Col] = size(rowIndexer);Sita_S = Mid_Mat(1, Sita_pos);Hash_table(Row, Sita_S) = j;endendHash_table = [rowIndexer, Hash_table];Hash_table = sortrows(Hash_table, 1);Hash_table(:,1) = [];rowIndexer = sort(rowIndexer);% 自动生成变量evalc(['rowIndexer_', num2str(i), '=', 'rowIndexer', ';']);Row_Nam = ['rowIndexer_', num2str(i)];detailPointNumOfTemplate = fingerprt_num;% 自动生成变量evalc(['detailPointNumOfTemplate_', num2str(i), '=', 'detailPointNumOfTemplate', ';']);Det_Nam = ['detailPointNumOfTemplate_', num2str(i)];Hash_table = sparse(Hash_table);% 自动生成变量evalc(['Hash_table_', num2str(i), '=', 'Hash_table', ';']);Has_Nam = ['Hash_table_', num2str(i)];save(Mfile_Nam, Has_Nam, Row_Nam, Det_Nam, '-append');eval(['clear',' ', 'Hash_table_', num2str(i), ' ', 'rowIndexer_', num2str(i), ' ', 'detailPointNumOfTemplate_', num2str(i), ';']);% 检测是否一直运行i
end

Matlab技巧总结——22-MathorCup相关推荐

  1. 【Matlab技巧——矩阵运算、Nan字符处理】

    Matlab技巧--矩阵运算.Nan字符处理 没人点赞这个博客就关啦!T_T 博客介绍 问题 1.一维矩阵 2.二维矩阵去除所有含Nan的行 3.二维矩阵去除所有全是Nan的行 没人点赞这个博客就关啦 ...

  2. MATLAB小技巧整理-那些你必须得知道的matlab技巧

    众所周知Matlab功能全面而强大,那么多知识点要记下来是有亿点点难的哈,那么是时候整理一波了,温故而知新嘛~ 系统:windows MATLAB版本:2016b 1. 随机数.随机噪声 close ...

  3. 软件测试中python实用技巧,精选22个Python实用技巧,秀技能必备这份技术列表!...

    被人工智能捧红的 Python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能.那么今天或许我能够让你学到一些新技巧. Python的发展: "人生苦短,我用 Pytho ...

  4. matlab技巧操作之颜色阈值

    今天学习如何使用matlab当中的可视化颜色阈值,来自B站up我想当你的验证码 主要是学会使用matlab当中的色彩分割器 色彩分割器当中有一个被称为是HSV的色彩调度,根据百度搜索我们了解到 HSV ...

  5. 【MATLAB技巧】——求解符号方程

    命令描述 [var1,var2,-,varn]=solve(eq1,eq2,-,eqn,var1,var2,-,varn) 其中eq代表的是方程的表达式,var代表的是所需要求的变量,结果将用除变量意 ...

  6. Vivado使用技巧(22):综合策略与设置的选择

    综合(Synthesis)是指将RTL设计转换为门级描述.Vivado开发套件中的综合工具是一款时序驱动型.专为内存使用率和性能优化的综合工具,支持System Verilog 2012.Verilo ...

  7. Matlab编程技巧:通过脚本获取/修改Simulink信号线参数

    上一篇博客<Matlab编程技巧:批量获取/修改Simulink模块参数>中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数.具体方法可以参考https://blog ...

  8. 《DSP using MATLAB》Problem 8.22

    时光飞逝,亲朋会一个一个离我们远去,孤独漂泊一阵子后,我们自己也要离开, 代码: %% -------------------------------------------------------- ...

  9. 计算机仿真技术-基于matlab的电子信息类课程课后答案,计算机仿真技术——基于MATLAB的电子信息类课程(第4版)...

    目 录 第1章 MATLAB语言概述1 1.1 MATLAB语言及特点1 1.2 MATLAB的工作环境2 1.2.1 MATLAB系统的安装2 1.2.2 MATLAB系统的启动2 1.2.3 MA ...

最新文章

  1. PHP date 格式化一个本地时间/日期
  2. 【编译原理】编译是怎么一个过程?
  3. 电脑技巧:键盘上的这几个键,不常用,但有必要了解一下!
  4. C++获取多维数组维数
  5. LUCK——组合数学
  6. python 代码命令大全-Python 命令行参数
  7. python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱
  8. (转)探寻区块链的源头——“重回拜占庭”
  9. 一号教学楼供配电设计
  10. 如何用Word打开PDF文件?
  11. 计算机英语 复习资料
  12. WebSocket实现简单多人聊天
  13. 微信公众号创建菜单报错40016
  14. 离散数学学习笔记-2-群 子群
  15. krpano plugin interface
  16. 计算机电缆价格范围,计算机电缆DJYPVPR价格,报价
  17. 探讨企业即时通讯软件的价值
  18. marvell万兆交换机内核编译总结
  19. 关于C++中的emplace_back的解释
  20. 化学机械抛光材料去除机理

热门文章

  1. 数据结构的逻辑结构及物理结构
  2. java令牌验证使用token和redis实现思路
  3. 论文对比实验图神器MulimgViewer
  4. 迷宫之深搜回溯算法(B站)
  5. 我的爱好作文玩计算机800,我的爱好作文1000字_我的爱好作文800字初中
  6. 渗透测试-SQL注入之sqlmap的使用方法及实战案例
  7. MATLAB 绘制数据图
  8. 汇编语言实验四-《汇编语言-王爽老师》
  9. C语言程序设计教程(第三版)课后习题11.1
  10. 什么是C语言和C++