Code: Selecteer alles
b(1,: )=[0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1]
Het resultaat zou zoiets moeten zijn:
Code: Selecteer alles
b(2,: )=[0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 5]
Van alles geprobeerd, maar mijn ideeen zijn op
Code: Selecteer alles
b(1,: )=[0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1]
Code: Selecteer alles
b(2,: )=[0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 5]
Code: Selecteer alles
X = 0;
Y = b(1, :D ;
countones = 0;
countgroups = 1;
for i = 1:length(Y)
if Y(i) = 1;
countones = countones + 1;
else
if countones>0
X(countgroups) = countones;
countones = 0;
end
end
end
if Y(end) = 1
X(contgroups) = countones;
end
Code: Selecteer alles
function uitVector = eenentellen(inVector)
% inVector is de vector met de eenen. In jouw geval b(1,:)
% uitVector is de vector met de uitwaarden. In jouw geval b(2, :)
% We moeten eerst het begin en eindpunt van een opeenvolgende serie 1-en te vinden.
% Dit kun je het beste doen met een soort afgeleide door te kijken naar het verschil tussen x(i) en x(i+1):
verschil = inVector(2:end) - inVector(1:end-1);
% vind nu de begin indices van de 1-en
beginIndices = find(verschil > 0) + 1;
% Als het eerste getal in de serie een 1 is, dan moet die ook nog mee worden genomen in de beginIndices
if inVector(1) > 0
beginIndices = [1 beginIndices];
end
% Zelfde verhaal voor de eindindices
eindIndices = find(verschil < 0);
if inVector(end) > 0
eindIndices(end+1) = length(inVector);
end
% Nu is het een kwestie het verschil tussen de begin indices en eind
% indices te tellen en deze in een nieuwe vector te plaatsen
% vector alloceren
uitVector = zeros(size(inVector));
uitVector(eindIndices) = eindIndices - beginIndices + 1;
end
Code: Selecteer alles
b(2, :) = eenentellen(b(1, :));
Dan krijg ik niet het antwoord dat ik wil weten hoor. Lees mijn vraag even goed.Stel dat jouw vector b heet. Gebruik: sum( (b>0)) (let op de haken)
Merien schreef:Dan krijg ik niet het antwoord dat ik wil weten hoor. Lees mijn vraag even goed.
Ik wil uiteindelijk de gemiddelde grootte weten van de clusters enen. Op jouw manier tel je gewoon de enen op
Ja. Nadat ik mijn reactie had gepost.Heb jij mijn vorig bericht gezien?
Inderdaad ik las slecht , maar ja ik zag dat ik bart verderhielp (althans dat denk ik )Merien schreef:Dan krijg ik niet het antwoord dat ik wil weten hoor. Lees mijn vraag even goed.
Ik wil uiteindelijk de gemiddelde grootte weten van de clusters enen. Op jouw manier tel je gewoon de enen op
Code: Selecteer alles
b = [1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1];
for i = 2:1:size(b,2),
if b(1,i) == 1,
b(1,i) = b(1,i-1) + 1;
b(1,i-1) = 0;
end
end
sum(b)/sum(b>0)
Kun je een voorbeeld geven van een \(b\) die niet tot een juist antwoord leidt?EvilBro, je code kan nooit werken, daar je op die manier nooit b(1,1) checkt en je dus hiermee een fout kan maken.
Superbedankt!physicalattraction schreef:Ik heb het gevoel dat het volgende voorbeeld niet het meest elegante voorbeeld is, maar wel moet werken.
De laatste if statement is om ervoor te zorgen dat je de laatste groep ook meetelt. Die smiley is dus een dubbele punt met een haakje sluiten er achter.Code: Selecteer alles
X = 0; Y = b(1, :P ; countones = 0; countgroups = 1; for i = 1:length(Y) if Y(i) = 1; countones = countones + 1; else if countones>0 X(countgroups) = countones; countones = 0; end end end if Y(end) = 1 X(contgroups) = countones; end
Code: Selecteer alles
[ ... x 1 ...] -> [ ... 0 (x+1) ...]