在使用MATLAB的时候,各位一定会遇到过导入数据的烦恼。如果需要导入的数据其数据量巨大的话,那么在MATLAB编辑器中将这些数据复制粘贴进来,显然会在编辑器中占据巨大的篇幅。那么究竟有没有一个简洁的办法不需要将数据复制粘贴到MATLAB编辑器中,而是直接使用MATLAB自带的一些函数可以直接将这些数据导入进来呢?一般来说储存这些数据的文件有两种形式:1)txt文件;2)excel表格
针对这两种类型的文件,需要使用两个不同的函数,今天主要讲解导入txt文件的方法。
就导入txt文件来说,我个人习惯使用importdata这个函数。
01 | 导入全是数字类型的txt文件(一)
如果导入的txt文件中,储存的数据全是数字类型的,且同一行的两个数字之间使用空格或者制表符进行分隔。这种形式的txt文件如下所示。
![7098b211cb3cd19f58caecb8ab1111e2.png](https://img-blog.csdnimg.cn/img_convert/7098b211cb3cd19f58caecb8ab1111e2.png)
储存这种形式数据的txt文件直接使用如下代码即可。
present01
在MATLAB运行之后的结果如下:
![e6867eaa7694d2ca1781aad8ddce7534.png](https://img-blog.csdnimg.cn/img_convert/e6867eaa7694d2ca1781aad8ddce7534.png)
02 | 导入全是数字类型的txt文件(二)
各位小伙伴可能会有疑问,如果我的数据不像刚才给出的数据那么规整,还能继续使用上面的代码了吗?
如果txt文件储存如下的数据:
![d88cf6ca2d60e7103b17450e75eb4133.png](https://img-blog.csdnimg.cn/img_convert/d88cf6ca2d60e7103b17450e75eb4133.png)
很明显这个txt文件,第一行只有1,第二行有2和3,第三行有4、5、6和7,第四行有8、9、10和11,第五行有12、13、14和15。如果我们继续使用上面的代码,看看能否成功导入数据。
present02
在MATLAB运行之后结果如下,是一个15行1列的矩阵,这个很明显和我们想要的形式不太一样。
![fa8035bca7f9d1572110fce5f00b7627.png](https://img-blog.csdnimg.cn/img_convert/fa8035bca7f9d1572110fce5f00b7627.png)
各位可以发现前两行的数据个数与后三行的数据个数不同,所以在实际导入的时候需要分开导入,这时可以使用如下代码导入present02.txt文件。
filename
filename是文件名,delimiterIn是列分隔符,也就是同一行的两个数据之间是如何分隔的,可以是空格,也可以是制表符,也可以是逗号。headerlinesIn表示读取从第 headerlinesIn+1 行开始的数值数据,因为前两行的数据个数与后三行的数据个数不同,所以这里headerlinesIn = 2,即从读取从第 3行开始的数值数据。在MATLAB运行之后的结果如下,是一个结构体,其中包括一个3行4列的矩阵data,和一个2行1列的元胞数组textdata。使用变量dataset储存这个3行4列的矩阵,使用parameters储存这个2行1列的元胞数组。
![45d0ebfe28298340cf40c02dfb840bcb.png](https://img-blog.csdnimg.cn/img_convert/45d0ebfe28298340cf40c02dfb840bcb.png)
![14feafe08250b04d37bf6ab66b73694a.png](https://img-blog.csdnimg.cn/img_convert/14feafe08250b04d37bf6ab66b73694a.png)
![027f8e140af8611693435d9067a16466.png](https://img-blog.csdnimg.cn/img_convert/027f8e140af8611693435d9067a16466.png)
![8653415d73316f47eb1ac38449454f47.png](https://img-blog.csdnimg.cn/img_convert/8653415d73316f47eb1ac38449454f47.png)
![23c5524c4c38832ba5acd5fdf5cb5fbd.png](https://img-blog.csdnimg.cn/img_convert/23c5524c4c38832ba5acd5fdf5cb5fbd.png)
其中这个3行4列的矩阵data就是后三行的数据,这个2行1列的元胞数组textdata就是前两行的数据。
其实在MATLAB中建议不到万不得已的时候尽量不用元胞数组cell,因为元胞数组在处理数据时不方便。但这个txt文件由于每行的数据个数不同,所以我们没有办法将其导入为一个5行4列的矩阵,我们才万不得已将前两行数据导入为元胞数组,后三行数据导入为3行4列的矩阵。
03 | 导入全是数字类型的txt文件(二)拓展
其实各位小伙伴可以尝试一下,在上述代码中将headerlinesIn设为5,看看是导入的结果是怎么样的?
filename
在MATLAB运行之后的结果如下,是一个5行1列的元胞数组。
![c50c1b514d74cbd132eff0329311ff6a.png](https://img-blog.csdnimg.cn/img_convert/c50c1b514d74cbd132eff0329311ff6a.png)
这里各位小伙伴可以思考一下,因为一共只有5行数据,而又将headerlinesIn设为5,所以此时读取从第6行开始的数值数据,这句话包含两层意思:1)读取从第6行开始的数值数据,在present02.txt文件中第6行没有数据,所以没有将数据以矩阵的形式导入进来。2)读取第5行之前的非数值数据,然后用元胞数组cell的形式进行储存。
04 | 导入数字和字母混合类型的txt文件
比如说现在导入标准的solomon测试算例,前8行中既有数字又有字母,且每行数据个数不同。
![6b8bf6ed585318b57211b87a4703d3ce.png](https://img-blog.csdnimg.cn/img_convert/6b8bf6ed585318b57211b87a4703d3ce.png)
观察发现,第10行以后的数据是一个101行7列的规整的数据。因此,可以将headerlinesIn设为9,具体的代码如下:
filename
在MATLAB运行之后的结果如下:
![5eae45b34670b1d8bbadbf9111c7aa0f.png](https://img-blog.csdnimg.cn/img_convert/5eae45b34670b1d8bbadbf9111c7aa0f.png)
![0b90403f91a09e71b9f4bba4c8b3784f.png](https://img-blog.csdnimg.cn/img_convert/0b90403f91a09e71b9f4bba4c8b3784f.png)
![302410594cc961dcd2b8a07beccd8fc1.png](https://img-blog.csdnimg.cn/img_convert/302410594cc961dcd2b8a07beccd8fc1.png)
更多资源尽在:优化算法交流地
往期精彩
- 号内搜索
- 遗传算法(GA)求解旅行商问题(TSP)MATLAB代码讲解
- 车辆路径问题(VRP)合集
- 遗传算法求解0-1背包问题(附matlab源代码)
- 模拟退火(SA)算法求解旅行商 (TSP)问题MATLAB代码讲解
- 多目标优化 | 基于NSGA-II的多目标0-1背包问题求解(附matlab代码)
- 多目标优化 | NSGA-II进阶教程(全网首个三目标优化教程)
- 机器学习 | 基于遗传算法的BP神经网络优化算法(附MATLAB代码)
- 遗传算法求解车间调度问题(附MATLAB代码)
- 多目标优化 | NSGA-II
- word转换为pdf后图片失真的解决办法(全网首发)
- 机器学习 | 简单实现Bp神经网络
- 二维装箱问题之BL法修正版(附MATLAB代码)
- 快速入门文献管理软件-EndNote X9
- 最小二乘法(附MATLAB代码)
- NSGA-II多目标优化算法讲解(附MATLAB代码)
- 基于人工势场法的机器人二维路径规划(附MATLAB代码)
- 基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)
- 蚁群算法通俗讲解(附MATLAB代码)
- 混合粒子群算法通俗讲解(附MATLAB代码)