matlab编程学习笔记(.xlsx转.mat、struct数据存.csv)

2023.7.28

一、将 Excel 文件中的数据保存为 MATLAB 中的 .mat 文件,并且将其保存为 struct 格式。

PS. 以下内容部分借助ChatGPT。

1、使用 xlsread 函数读取 Excel 文件中的数据:

% 读取 Excel 文件数据
[num_data, text_data] = xlsread('data.xlsx');

2、创建一个 struct 并将 Excel 中的数据存储到 struct 的字段中:

% 创建 struct 并存储数据
data_struct.name = text_data(:, 1);  % 第一列为姓名
data_struct.age = num_data(:, 1);    % 第一列为年龄
data_struct.city = text_data(:, 2);  % 第二列为城市

数字和文本应该是会单独储存。

3、删除结构体(struct)中的某个字段(field),可以使用 rmfield 函数:

new_struct = rmfield(old_struct, 'field_name');
% eg.% data_struct = rmfield(data_struct, 'age');

或者直接手动删除再保存。

4、使用 save 函数将 struct 保存为 .mat 文件:

% 保存 struct 到 .mat 文件
save('data_file.mat', 'data_struct');

2023.7.30

二、将1*50的struct数组存为.csv文件,包括将struct中有的字段下的行向量数据转换为列向量,以及建立循环将每个字段下每行数据的内容都写在一个变量名称之下。

PS. 这部分的代码得益于师兄的帮助。

struct数组的样貌如下:

9c0c53dc1af54326964456cd6d4118c1.png

注意:data字段下的数据是以行向量的形式储存的,而我最终希望得到一个列向量。因此要对其进行转置。

clear; 
clc; #清除命令行窗口和工作区。在保证变量名不重复的情况下也可以不清除。

for i = 1:length(Data)
    data((i-1)*162+1:i*162,1) = transpose(dt(i).data); #当i=1时,data中的数据从第1行到第162行。transpose正是对data字段中的数据进行转置操作。注意左侧的data并不是指代结构体的字段,而是一个在循环过程中用于暂存转置后数据的普通变量。下agent/subjID同。
    agent((i-1)*162+1:i*162,1) = Data(i).agent;
    subjID((i-1)*162+1:i*162,1) = repmat(i, 162, 1); #这里简化为让被试名只以数字1-50的形式呈现。
end
DT = table(subjID,data,agent,'VariableNames',{'subjID','data','agent'}); #添加一行变量名。

writetable(DT, 'Data.csv'); #将以上数据存储为csv文件。

 得到的csv文件如下所示:

0d49b0e5709840dfb78176a6d7359611.png


2023.10.17

后来接触了太多matlab代码,来不及整理记录了,但上面两条或许对有的人有帮助。先分享出来~

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值