我在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(importdata(FileName));
Time=T(:,5:16);
Data=str2double(T);
但是,当我在整个矩阵上测试它(大约500,000行)时,我收到了Data = []而不是矩阵。
我还能做其他什么吗?'数据'即使对于大型矩阵也会是双矩阵?
1,26:45:32:350,6,7,8,9,9,0,0,0
位于1个单元格内。另外,我写了另一段代码,但有效,但需要很多时间才能运行。
[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行运行此代码表明:(从最慢到最快) waitbar allchild str2num IMPORTDATA
所以基本上我可以删除这个等待栏,但allchild(不确定它是什么)和str2num占用了大部分时间。
我能做些什么来让它跑得更快?