matlab报错:元胞内容引用自非元胞数组对象


 filename=uigetfile('*.mat;*.txt');
    f=load(filename);
    for i=1:1:numel(f)
        b=f{i};
        if strncmpi(b,'byb1',4)
         xtm=b;
        elseif strncmpi(a,'byb2',4)
         xtc=b;
        elseif strncmpi(a,'traindata',9)
         xcm=b;
        elseif strncmpi(a,'testdata',8)
         xpc=b;
        elseif strncmpi(a,'trainlab',8)
         yc=b;
        elseif strncmpi(f,'testlab',7)
         yp=b;
        end
    end
  [RMSEP,RMSEC,Ryu,MREyu,xre,yc,xpcm,yp1]=pdspls(xtm,xtc,xcm,xpc,yc,yp,0.01,handles.win,handles.lv);

报错:元胞内容引用自非元胞数组对象。提示我b={i}出错。
图片是我导入工作区里的mat文件,也就是变量f

img

这是哪里出错了?

同学啊,为啥你用f=load(fileName)呢

filename=uigetfile('*.mat;*.txt');
f=load(filename);
    for i=1:1:numel(f)
        b=fileName{i};
        if strncmpi(b,'byb1',4)
         xtm=f.{'xtm'};%可以类似这种。。。
        end
    end
  [RMSEP,RMSEC,Ryu,MREyu,xre,yc,xpcm,yp1]=pdspls(xtm,xtc,xcm,xpc,yc,yp,0.01,handles.win,handles.lv);

img

这个花括号这里有点问题。还有变量f是struct结构体,是不是不能这样用啊

img

我这样写了,直接调用,这样可以读取了


 filename=uigetfile('*.mat;*.txt');
        b=load(filename);
         xtm=b(1).byb1snv; 
         xtc=b(1).byb2snv;
         xcm=b(1).traindatab1snv;
         xpc=b(1).testdatab2snv;
         yc=b(1).trainlab1;
         yp=b(1).testlab1;
  [RMSEP,RMSEC,Ryu,MREyu,xre,yc,xpcm,yp1]=pdspls(xtm,xtc,xcm,xpc,yc,yp,0.01,handles.win,handles.lv);