Matlab将.mat文件保存为.txt文件

本文介绍了三种在MATLAB中将数据转换并保存为文本文件的方法:使用save命令、dlmwrite()函数及自定义mat2txt()函数。每种方法都有其适用场景和局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  由于一开始没写mat2txt()的函数,手动转换发现工作量巨大,于是网上搜索了关于保存的方法,大家的方法各有不同,整理一下现总结如下:

1、使用save命令保存

  命令如下:

// filename.txt 为要保存的文件名,data 为工作区中的变量
save  filename.txt  data -ascii 

  先说这种方法的优点,就是简单!简单!当然,既然简单肯定有局限性,就是这种方法保存出来的 .txt 是不会换行的,变量 data 中的数据全部置于文本文件中,无法区分;若之前的变量 data 是一行数据,推荐这种方法, 若之前的变量 data 是n*m 的矩阵,则不推荐这种方法。另外,这种方法保存的数据,会自动以科学计数法保存,若原本数据是整数,看起来肯定不爽。

2、使用dlmwrite()函数保存

  命令如下:

dlmwrite('filename.txt',data);

  需要说明一下参数的意义,filename.txt 为需要保存的文件的名称,data 是需要保存的工作区中的数据。默认情况下,转换格式后的数据之间使用逗号隔开,我们可以通过参数更改,即使用关键字“delimiter”,下面是使用空格隔开的一个例子:

dlmwrite('filename.txt',data,'delimiter',' ');

  除此之外,还可以使用 precision 设置数据精度;使用 newline 设置行终止符,‘pc’表示使用回车换行符,‘unix’表示换行符。

  还是要说优缺点。这种方法依然是很简便的,但是它依然不能实现矩阵的转换,与使用 save 命令的保存没有太多不同。

3、使用自己编写的函数 mat2txt() 保存

  既然以上matlab自带函数无法实现我们想要的结果,于是自己编写一个函数实现该功能,代码如下:

//把矩阵 matrix 保存成任意后缀的文件
//转换成 .txt 举例:mat2txt( 'filename.txt', data );
//转换成 .corr 举例:mat2txt( 'filename.corr',data );

function back = mat2txt( file_Name, matrix ) 
fop = fopen( file_Name, 'wt' );
[M,N] = size(matrix);
for m = 1:M
    for n = 1:N
        fprintf( fop, ' %s', mat2str( matrix(m,n) ) );
    end
    fprintf(fop, '\n' );
end
back = fclose( fop ) ;

  该函数可以实现 .mat 到任意后缀格式文件的转换,前提是源数据为纯数据文件。

### 将PNG图像文件转换为MATLAB.mat数据文件MATLAB中,可以轻松地将PNG图像文件保存为`.mat`数据文件。此过程涉及读取图像文件并将它们存储到结构体或数组中,最后使用`save`命令将其保存为`.mat`文件。 #### 方法一:单张图片保存.mat文件 对于单一PNG图像文件的操作相对简单: ```matlab img = imread('example.png'); % 读取PNG图像文件 save('imageData.mat', 'img'); % 将图像数据保存.mat文件 ``` 上述代码先通过`imread`函数加载指定路径下的PNG图像,并命名为`img`变量;随后调用`save`指令把该变量连同其名称一起存入名为`imageData.mat`的数据文件内[^1]。 #### 方法二:批量处理多张PNG图片并保存.mat文件 当面对多个PNG图像时,则需采用循环机制逐一遍历目标目录中的所有符合条件(如扩展名匹配)的文件项,进而逐一完成各自的导入与储存工作: ```matlab folderPath = 'F:\MATLAB2017b\AMOutputResults\flowers\'; filePattern = fullfile(folderPath, '*.png'); files = dir(filePattern); numFiles = length(files); imagesCellArray = cell(1, numFiles); % 创建单元格数组用于存放各幅图像矩阵 for k = 1:numFiles baseFileName = files(k).name; fullFileName = fullfile(folderPath, baseFileName); fprintf('正在处理:%s\n', fullFileName); imagesCellArray{k} = imread(fullFileName); % 加载当前迭代索引对应的图像 end % 把整个单元格数组一次性写入.mat文件之中 save('allImagesInOneFile.mat', 'imagesCellArray') ``` 这段脚本首先定义了一个包含待处理PNG图像所在位置的信息字符串——`folderPath`以及相应的通配符模式——`filePattern`以便于后续筛选特定类型的文件列表。接着运用内置函数`dir()`获取满足条件的所有条目构成向量型集合对象`files`。之后初始化一个大小适配于预期输入数量级的空洞容器——`imagesCellArray`用来暂存即将被序列化的二维灰度级或彩色像素阵列。核心逻辑部分由`for...end`控制流语句主导,在每次遍历时动态更新计数器k的同时访问对应位次上的成员属性值作为实际操作依据,最终借助`fprintf()`打印进度提示信息并通过`imread()`执行具体的I/O动作直至结束为止。最后一行则负责汇总整理前期积累下来的成果集合成统一的整体再经由`save()`持久化落地成为磁盘上可识别的目标产物[^5]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值