struct matlab数组中的错误

时间:2016-04-06 09:22:45

标签: matlab

我想使用svm训练各种标签上的数据,并希望svm模型作为struct的数组。我这样做但收到错误:

  

不同结构之间的订阅分配。

请帮帮我

model = repmat(struct(),size);
for i=1:size
     model(i) = svmtrain(train_data,labels(:,i),'Options', options);    
end

1 个答案:

答案 0 :(得分:0)

MATLAB中的结构数组只能包含相同字段的结构。首先创建一个空结构 1 的数组,然后尝试用SVMStruct结构填充它,您尝试创建一个带有一些空结构和一些SVMStruct结构的混合数组。这是不可能的,因此MATLAB抱怨"不同的结构" (不等于结构:空与SVMStruct)。

要分配一个结构数组,你必须在初始化期间指定所有字段并用初始值填充它们 - 在这种情况下这是相当不方便的。一个非常简单的选择是放弃这个初始化,然后以 2,3 的方式运行你的循环:

for ii=sizeOfLabels:-1:1
     model(ii) = svmtrain(train_data,labels(:,ii),'Options', options);    
end

这样,对于ii=sizeOfLabels,例如ii=100,MATLAB会调用model(100)=...,而model尚不存在。然后,它将分配100个SVMStruct所需的所有空间,并用空值填充前99个实例。这样你就可以预先分配内存,而不必担心初始化值。

<小时/> 1 注意:如果是size=5,调用repmat(struct(),size)将创建 5 x 5 空结构矩阵。要创建 1 x 5 结构数组,请调用repmat(struct(),1,size)

2 Don't use size as a variable name,因为这是一个函数。如果您这样做,则无法再使用size功能。

3 i and j denote the imaginary unit in MATLAB。将它们用作变量可以减慢代码速度并且容易出错。使用例如<{1}}或k代替循环。