Matlab str2num和导入大型矩阵的数据

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(

我在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);
然而,当我在整个矩阵(大约500000 roww)上测试它时,我收到的是数据=[],而不是矩阵

我还可以做些什么,使“数据”成为双矩阵,即使是大型矩阵

  • excel文件包含1列和大约500000行,因此整行
    1,26:45:32:350,6,7,8,9,9,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行可以显示:(从最慢到最快) 服务员 奥尔奇尔德 str2num 输入数据

所以基本上我可以删除这个waitbar,但是allchild(不确定它是什么)和str2num占用了大部分时间


我能做些什么使它运行得更快吗?

您收到任何错误或警告吗?听起来您可能超出了容器的大小。没有警告,只有Data=[]。超出容器的大小意味着什么?如果你说它适用于矩阵的一个子集,那么我只能想象你的原始文件太大,无法像那样处理。但通常情况下,如果出现这种情况,MATLAB会通知您,因此我不确定它为什么不起作用。请看一下
xlsread
,它可能更适合您想要的内容。尝试了xlsread(Filename),现在它给了我T=[];