【发布时间】:2012-11-25 12:34:46
【问题描述】:
运行 matlab 代码时出现错误。在这里,我尝试使用以前代码的输出之一作为新代码的输入。
??? Reference to non-existent field 'y1'.
谁能帮帮我?
【问题讨论】:
标签: matlab
运行 matlab 代码时出现错误。在这里,我尝试使用以前代码的输出之一作为新代码的输入。
??? Reference to non-existent field 'y1'.
谁能帮帮我?
【问题讨论】:
标签: matlab
一个好的做法可能是在访问之前检查该字段是否存在:
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
【讨论】:
您是否使用命令 load 从文件中加载数据? 如果是,则此函数会覆盖您当前的变量,因此,它们将不存在,因此当您调用时,它不会使用:
load ('filename');
使用:
f=load ('filename');
现在,要引用加载文件中的任何变量,请使用 f.varname,例如 例如,如果在加载的数据中保存了一个名为 net 的网络,您可以像这样使用它:
a = f.net(fv);
【讨论】:
我会先说明我的情况,然后给出解决方案。
op,它是一个struct,它的名字是coef.mat;coef = load( file_path, '-mat') 加载这个变量;coef作为参数传递给它,这里弹出错误Reference to non-existent field。我的解决方案:
coef 替换为coef.op,然后将其传递给函数即可。所以,我认为背后的原因是:struct 被保存为一个变量,当你使用load 并想要访问 origin 变量时,你需要直接用dot(.)操作指出来,可以直接在Matlab工作区打开变量,看看它在变量里面包裹了什么。
在您的情况下,如果您的 先前代码的输出 是一个结构(这是我的猜测,但您没有指出)并且您将其保存为 MyStruct,则将其加载为MyInput = load(MyStruct),那么当作为函数的参数使用时,应该是 MyInput.y1.
希望它会起作用!
【讨论】:
首先将其加载到命令窗口并观察工作区窗口。您可以看到结构名称。它将通过访问结构名称来工作。示例:
lm=load('data.mat');
disp(lm.SAMPLE.X);
这里 SAMPLE 是结构名称,X 是结构的成员
【讨论】: