如果加载的文件中不存在变量,则为其赋值为零值(Octave)



Case1.Mat文件包含X Y Z2 6 33 7 44 8 6

5 9 8

load(Case1.Mat); # loaded a Case1.Mat file in Octave
label=[{X;Y;Z;V}]; # I have a matrix of predefined variables
Nrow=numel(label);
ResMat=ones(Nrow,1);
for k=1:Nrow;
ResMat(k,1)=max(label{k,1});
End

我刚刚展示了简化问题的示例,但在我的情况下,Mat文件包含>300个变量,并且对于每种情况,变量的数量都会发生变化。因此,我定义了一个包含所有变量的标签矩阵。在上面的示例中,变量"V"不在.mat文件中,因此它会导致错误并停止执行。我正在尝试计算每个变量(列)的最大值。我的问题是,每当我遇到这样的情况时,"labels"中定义的变量不在加载的.Mat文件中,那么该变量值(在这种情况下为"V")应该被赋值为零(双),这样我的Nrow应该是"4",我的"ResMat"应该看起来像这样ResMat=[5;9;8;0]我是这个编程环境的新手,请原谅我提出这个问题的方式。

回复后
案例1_lg.MAT错误:在第8行第33列附近未定义"oflv3">

错误:从第8行第6列的procsMax3调用

# Constantes (my actual code)
for i=1;
for j={'lg'};
filename = strcat("Case",sprintf("%d",i),"_",j{},".MAT");
load(filename);
display(filename);
Ncol=1;
label=[{vBrfrda;vBrfrdb;vBrfrdc;oflv3}];
if ~isfield(label, 'V')
data.V = 0;
endif
Nrow=numel(label);
ResMat=ones(Nrow,Ncol);
for k=1:Nrow;
ResMat(k,i)=max(label{k,i});
end
end
end

在上述情况下,oflv3不在.Mat文件中

您可以使用exist检查变量的存在,如果未定义该变量,则分配默认值

if ~exist('V', 'var')
V = 0;
end

不过,更好的方法是为load指定一个输出,以便所有变量都被分配为struct中的字段,这样您就不必担心覆盖用户工作空间中可能已经存在的变量或其他可能的问题。在这种情况下,您可以使用isfield来检查文件中是否存在V,并在需要时用默认值替换

data = load(filename);
if ~isfield(data, 'V')
data.V = 0;
end

相关内容

  • 没有找到相关文章

最新更新