Ich möchte ein Array in Segmente nach Prozenten aufteilen. Zum Beispiel teilen 100 Elemente in Segmente [1/3,1/4,5/12]
, aber [1/3,1/4,5/12]*100=[33.3,25,41.7]
, so dass es notwendig ist, sie auf ganze Zahlen [33,25,42]
(andere wie [34,24,42]
oder [33,26,41]
sind auch akzeptabel, ein Wandern innerhalb 1 ist nicht wichtig) anzupassen.Wie unterteilt man ein Array?
Derzeit verwende ich eine Schleife dieses
function x = segment(n,pct)
x = n * pct;
y = fix(x);
r = x - y;
for ii = 1 : length(r)-1
[r(ii),r(ii+1)] = deal(fix(r(ii)),r(ii+1)+r(ii)-fix(r(ii)));
end
x = y + r;
segment(100,[1/3,1/4,5/12])
gibt [33,25,42]
rekursiv zu tun.
Gibt es einen besseren Weg ohne rekursive Schleife?
Ist 'Runde (n * pct)' Was suchen Sie..? – Adiel
@Adiel Nein, 'sum (round (n * pct))' ist nicht garantiert, 'n' zu sein – Lee
Oh, ich bekomme. Also würde ich einfach diese Zahl berechnen, und wenn ich '100-n' bekomme, würde ich die' n' Elemente erhöhen, die näher an ihrer Runde sind. Das gleiche für '100 + n' mit Dekrementen ... Würde das passen? – Adiel