Matlab str2num和导入大型矩阵的数据
我在xlsx文件中有一个大矩阵,其中包含以下字符,例如:Matlab str2num和导入大型矩阵的数据,matlab,matrix,import,xlsx,Matlab,Matrix,Import,Xlsx,我在xlsx文件中有一个大矩阵,其中包含以下字符,例如: 1,26:45:32.350,6,7,8,9,9,0,0,0 1,26:45:32.409,5,7,8,9,9,0,75,89 我想做第二列(包含26:45:32:350的那一列) 作为时间向量,其余的都作为双矩阵 我在50000行上尝试了下一个代码,结果成功了 [FileName PathName] = uigetfile('*.xlsx','XLSX Files'); fid = fopen(FileName); T=char(
1,26:45:32.350,6,7,8,9,9,0,0,0
1,26:45:32.409,5,7,8,9,9,0,75,89
我想做第二列(包含26:45:32:350的那一列)
作为时间向量,其余的都作为双矩阵
我在50000行上尝试了下一个代码,结果成功了
[FileName PathName] = uigetfile('*.xlsx','XLSX Files');
fid = fopen(FileName);
T=char(importdata(FileName));
Time=T(:,5:16);
Data=str2double(T);
然而,当我在整个矩阵(大约500000 roww)上测试它时,我收到的是数据=[],而不是矩阵
我还可以做些什么,使“数据”成为双矩阵,即使是大型矩阵
- excel文件包含1列和大约500000行,因此整行
位于1个单元格内1,26:45:32:350,6,7,8,9,9,0,0
[FileName PathName] = uigetfile('*.xlsx','XLSX Files');
fid = fopen(FileName);
T=importdata(FileName);
h = waitbar(0,'Converting Data to cell array, please wait...');
for i=1:length(T)
delimiter_index=[0 find(T{i,1}(:)==char(44))'];
for j=1:length(delimiter_index)-1
Data{i,j}=T{i,1}(delimiter_index(j)+1:delimiter_index(j+1)-1);
end
waitbar(i/length(T));
end
close(h)
h = waitbar(0,'Seperating Data to time and data, please wait...');
for i=1:length(T)
Full_Time(i,:)=Data{i,2};
Data{i,2}=Data{i,1};
Data{i,1}=Full_Time(i,:);
waitbar(i/length(T));
end
close(h)
Data(:,1)=[];
h = waitbar(0,'Changing data cell to mat, please wait...');
for i=1:size(Data,1)
for j=1:size(Data,2)
Matrix(i,j)=str2num(Data{i,j});
end
waitbar(i/size(Data,1));
end
close(h)
将此代码运行大约20000行可以显示:(从最慢到最快)
服务员
奥尔奇尔德
str2num
输入数据
所以基本上我可以删除这个waitbar,但是allchild(不确定它是什么)和str2num占用了大部分时间
我能做些什么使它运行得更快吗?您收到任何错误或警告吗?听起来您可能超出了容器的大小。没有警告,只有Data=[]。超出容器的大小意味着什么?如果你说它适用于矩阵的一个子集,那么我只能想象你的原始文件太大,无法像那样处理。但通常情况下,如果出现这种情况,MATLAB会通知您,因此我不确定它为什么不起作用。请看一下
xlsread
,它可能更适合您想要的内容。尝试了xlsread(Filename),现在它给了我T=[];