Matlab技巧总结——22-MathorCup
一、多个“规律命名”的文件
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相关推荐
- 【Matlab技巧——矩阵运算、Nan字符处理】
Matlab技巧--矩阵运算.Nan字符处理 没人点赞这个博客就关啦!T_T 博客介绍 问题 1.一维矩阵 2.二维矩阵去除所有含Nan的行 3.二维矩阵去除所有全是Nan的行 没人点赞这个博客就关啦 ...
- MATLAB小技巧整理-那些你必须得知道的matlab技巧
众所周知Matlab功能全面而强大,那么多知识点要记下来是有亿点点难的哈,那么是时候整理一波了,温故而知新嘛~ 系统:windows MATLAB版本:2016b 1. 随机数.随机噪声 close ...
- 软件测试中python实用技巧,精选22个Python实用技巧,秀技能必备这份技术列表!...
被人工智能捧红的 Python 已是一种发展完善且非常多样化的语言,其中肯定有一些你尚未发现的功能.那么今天或许我能够让你学到一些新技巧. Python的发展: "人生苦短,我用 Pytho ...
- matlab技巧操作之颜色阈值
今天学习如何使用matlab当中的可视化颜色阈值,来自B站up我想当你的验证码 主要是学会使用matlab当中的色彩分割器 色彩分割器当中有一个被称为是HSV的色彩调度,根据百度搜索我们了解到 HSV ...
- 【MATLAB技巧】——求解符号方程
命令描述 [var1,var2,-,varn]=solve(eq1,eq2,-,eqn,var1,var2,-,varn) 其中eq代表的是方程的表达式,var代表的是所需要求的变量,结果将用除变量意 ...
- Vivado使用技巧(22):综合策略与设置的选择
综合(Synthesis)是指将RTL设计转换为门级描述.Vivado开发套件中的综合工具是一款时序驱动型.专为内存使用率和性能优化的综合工具,支持System Verilog 2012.Verilo ...
- Matlab编程技巧:通过脚本获取/修改Simulink信号线参数
上一篇博客<Matlab编程技巧:批量获取/修改Simulink模块参数>中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数.具体方法可以参考https://blog ...
- 《DSP using MATLAB》Problem 8.22
时光飞逝,亲朋会一个一个离我们远去,孤独漂泊一阵子后,我们自己也要离开, 代码: %% -------------------------------------------------------- ...
- 计算机仿真技术-基于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 ...
最新文章
- PHP date 格式化一个本地时间/日期
- 【编译原理】编译是怎么一个过程?
- 电脑技巧:键盘上的这几个键,不常用,但有必要了解一下!
- C++获取多维数组维数
- LUCK——组合数学
- python 代码命令大全-Python 命令行参数
- python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱
- (转)探寻区块链的源头——“重回拜占庭”
- 一号教学楼供配电设计
- 如何用Word打开PDF文件?
- 计算机英语 复习资料
- WebSocket实现简单多人聊天
- 微信公众号创建菜单报错40016
- 离散数学学习笔记-2-群 子群
- krpano plugin interface
- 计算机电缆价格范围,计算机电缆DJYPVPR价格,报价
- 探讨企业即时通讯软件的价值
- marvell万兆交换机内核编译总结
- 关于C++中的emplace_back的解释
- 化学机械抛光材料去除机理