同时执行具有多个功能和多个类别的Logistic回归(我选择的数据集具有1,2,3,4和5类)m(> 100)样本数据,其类别在1到5之间我试图找出不。标签/类的集合,并将它们作为向量。我可以用Y作为大小(m,1)
的列向量编写以下代码classes = [Y(1,1)]; #Initializing classes
for i = 2:m
count = 0;
for j = 1:length(classes)
if Y(i,1) == classes(j,1)
count = count + 1;
end;
end
if count ==0
classes = [classes; Y(i,1)];
end
end
这给了我向量Y的唯一标签的列表。但是,我想知道是否有更好的方法来编写此代码(上面的代码行对我来说似乎是幼稚的),尤其是通过矢量化。欢迎任何建议。谢谢。
看来,如果代码的目的只是为了生成Y中唯一值的列表,则可以只使用unique(Y)
。例如:
>> m = 10;
>> Y = floor(rand(m,1)*5+1)
Y =
5
1
5
4
2
2
1
5
1
4
>> unique(Y)
ans =
1
2
4
5
现在,函数的输出具有它们的顺序,使它们首先出现在列表中。例如,>
classes = 5 1 4 2
如果那很重要,您将需要这样的东西:
>> [sortedClasses idx] = unique(Y,"first") sortedClasses = 1 2 4 5 idx = 2 5 4 1 >> unsortedClasess = Y(sort(idx)) unsortedClasess = 5 1 4 2
unique
和sort
都可以很好地向量化速度。并且删除classes
的重复扩展将防止重复的变量复制,如果您的类数量很多,则这将带来可观的开销。