function [trainClasses,trainData]=balanceClasses(trainClasses,trainData,maxPerClass,noClasses)
if maxPerClass > min(histcounts(trainClasses,noClasses))
maxPerClass=min(histcounts(trainClasses));
warning('not enough Data per Class; set maxPerClass to %i', maxPerClass);
end
i=1;
% number of elements per class that has to be deleted
delPerClass=histcounts(trainClasses,noClasses)-maxPerClass;
delIndex=zeros(sum(delPerClass),1); % collects the indices that will be deleted
while sum(delPerClass)>0
r=fix(size(trainClasses,1)*rand(1)+1);
if delPerClass(trainClasses(r)+1)>0 && all(delIndex~=r)
delIndex(i)=r;
i=i+1;
delPerClass(trainClasses(r)+1)=delPerClass(trainClasses(r)+1)-1;
end
end
trainClasses(delIndex)=[];
trainData(delIndex,:)=[];
assert(size(trainClasses,1)>0)
end