Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab:如何消除不存在字段的误差_Matlab - Fatal编程技术网

Matlab:如何消除不存在字段的误差

Matlab:如何消除不存在字段的误差,matlab,Matlab,我在运行matlab代码时出错。在这里,我试图使用以前代码的一个输出作为新代码的输入 ??? Reference to non-existent field 'y1'. 有人能帮我吗?一个好的做法可能是在访问字段之前检查字段是否存在: 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 abou

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

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

有人能帮我吗?

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

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
考虑到艾德里克的评论,另一种可能的方法是

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

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

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
考虑到艾德里克的评论,另一种可能的方法是

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 ('filename');
使用:

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

a = f.net(fv);

您是否使用命令加载文件中的数据? 如果是,此函数将覆盖当前变量,因此这些变量将不存在,因此,当您调用时,它将替代使用:

load ('filename');
使用:

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

a = f.net(fv);

我会先解释我的情况,然后给出解决方案

  • 我首先保存一个变量
    op
    ,它是一个结构,它的名称是
    coef.mat
  • 我使用
    coef=load(文件路径,'-mat')
    加载这个变量
  • 在一个新函数中,我将变量
    coef
    作为一个参数传递给它,在这里,对不存在的字段的错误引用弹出
我的解决方案:

  • 只需将
    coef
    替换为
    coef.op
    ,然后将其传递给函数,它就会工作
因此,我认为背后的原因是:struct被保存为变量,当您使用
load
并希望访问原始变量时,您需要使用
dot(.)
操作直接指出它,您可以直接在Matlab workspace中打开变量,并找出变量中包含的内容

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


希望它能起作用

我会先解释我的情况,然后给出解决方案

  • 我首先保存一个变量
    op
    ,它是一个结构,它的名称是
    coef.mat
  • 我使用
    coef=load(文件路径,'-mat')
    加载这个变量
  • 在一个新函数中,我将变量
    coef
    作为一个参数传递给它,在这里,对不存在的字段的错误引用弹出
我的解决方案:

  • 只需将
    coef
    替换为
    coef.op
    ,然后将其传递给函数,它就会工作
因此,我认为背后的原因是:struct被保存为变量,当您使用
load
并希望访问原始变量时,您需要使用
dot(.)
操作直接指出它,您可以直接在Matlab workspace中打开变量,并找出变量中包含的内容

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


希望它能起作用

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

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

这里的示例是结构名称,X是结构的成员,首先将其加载到命令窗口并观察工作区窗口。您可以看到结构名称。它将通过访问结构名来工作。例如:

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

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

遗憾的是,在这里使用try/catch实际上更快。遗憾的是,在这里使用try/catch实际上更快。