1

运行 matlab 代码时出现错误。在这里,我尝试使用以前代码的输出之一作为新代码的输入。

??? Reference to non-existent field 'y1'.

谁能帮我?

4

4 回答 4

3

一个好的做法可能是在访问之前检查该字段是否存在:

if isfield( s, 'y1' )
    % s.y1 exists - you may access it
    s.y1
else
    % s.y1 does not exist - what are you going to do about it?
end

考虑到 Edric 的评论,另一种可能的方式是

try 
    % access y1
    s.y1
catch em
    % verify that the error indeed stems from non-existant field
    if strcmp(em.identifier, 'MATLAB:nonExistentField')
         fprintf(1, 'field y1 does not exist...\n');
    else
         throw( em ); % different error - handle by caller?
    end
end
于 2012-11-25T13:31:47.537 回答
1

您是否使用命令load从文件中加载数据?如果是,则此函数会覆盖您当前的变量,因此,它们将不存在,因此当您调用时,它而不是使用:

load ('filename');

利用:

f=load ('filename');

现在,要引用加载文件中的任何变量,请使用 f.varname,例如,如果在加载的数据中保存了一个名为 net 的网络,您可以像这样使用它:

a = f.net(fv);
于 2017-04-11T22:48:18.220 回答
0

我会先说明我的情况,然后给出解决方案。

  • 我先保存一个变量op,它是一个struct,它的名字是coef.mat
  • coef = load( file_path, '-mat')我使用;加载这个变量
  • 在一个新函数中,我将变量coef作为参数传递给它,在这里,弹出错误引用不存在的字段。

我的解决方案:

  • 只需替换coefcoef.op,然后将其传递给函数,它将起作用。

所以,我认为背后的原因是:struct被保存为变量,当你使用load并想要访问origin变量时,你需要直接使用操作指出它dot(.),你可以直接在Matlab工作区打开变量并找出它包含在变量中的内容。

在您的情况下,如果您之前代码的输出是一个结构(这是我的猜测,但您没有指出)并且您将其保存为MyStruct,则将其加载为MyInput = load(MyStruct)然后将其用作函数的参数时,它应该是 MyInput.y1

啤酒花它会工作!

于 2017-12-29T05:36:17.017 回答
0

首先将其加载到命令窗口并观察工作区窗口。您可以看到结构名称。它将通过访问结构名称来工作。例子:

lm=load('data.mat');
disp(lm.SAMPLE.X);

这里 SAMPLE 是结构名称,X 是结构的成员

于 2019-07-03T05:23:25.373 回答