2016-11-29 2 views
0

Jede meiner Anweisungen funktioniert individuell, jedoch habe ich Probleme mit meiner Schleife. Ich habe Unterstation Daten wie folgt aus:Matlab - Summieren von Werten, die einer Bedingung in einer Schleife entsprechen, und Speichern der Ausgabe

1 4 
1 5 
1 6 
2 2 
2 8 
2 9 
3 1 
3 5 
3 8 

I dann versuchen, die folgende Schleife zu verwenden, um die Daten in der zweiten Spalte durch die Zahl in der ersten Spalte gruppiert zu summieren, und dann in einer Matrix zu speichern.

for region = 1:Nnuts3 
idx = find(substations(:,1)==Nnuts3); 
output = sum(substations(idx,2),1); 
mat(Nnuts3,1) = output; 
end 

Jede der Aussagen in der hier arbeitet als individuelle Codezeile in Ordnung, wenn ich Nnuts3 und in einer Reihe entfernen, aber es als Ganze Schleife funktioniert nicht.

Was mache ich falsch? Ich möchte nur die Daten mit dem Index in der ersten Zeile als Bedingung summieren und dann die Ausgabe speichern.

Antwort

0

Es sieht aus wie Sie nicht die Variable region auf der Linie wurden unter Verwendung idx = find(substations(:,1) == region);

folgende Arbeiten für mich:

clear all; 

substations = [1, 4; 1, 5; 1, 6; 2, 2; 2, 8; 2, 9; 3, 1; 3, 5; 3, 8]; 

Nnuts3 = 8; % or whatever it needs to be 

for region = 1:Nnuts3 
    idx = find(substations(:,1) == region); 
    output = sum(substations(idx,2), 1); 
    mat(region,1) = output; 
end 

die Ausgabe Giving:

mat = 

    15.0000e+000 
    19.0000e+000 
    14.0000e+000 
    0.0000e+000 
    0.0000e+000 
    0.0000e+000 
    0.0000e+000 
    0.0000e+000 

Ich hoffe, das hilft :)

3

Sie sollten th verwenden e Funktion accumarray, die speziell für Ihr Problem bestimmt:

data = [1, 4; 1, 5; 1, 6; 2, 2; 2, 8; 2, 9; 3, 1; 3, 5; 3, 8]; 
result = accumarray(data(:,1),data(:,2),[],@sum) %accumarray(index,data,[],@function) 

Wir erhalten:

[[1:max(data(:,1))]',result(:)] = 

1 15 
2 19 
3 14 

PS: result = accumarray(data(:,1),data(:,2)) %accumarray(index,data) werden Sie das gleiche Ergebnis, aber meiner Meinung nach ist es klar, präzise die gewünschte " Gruppierung "Funktion.

+0

Dank Obchardon, das ist gut zu wissen. Wahrscheinlich effizienter als die Schleife, die ich vermute? –

+0

in der Tat. Vor allem aber erhöht es die Lesbarkeit – obchardon

Verwandte Themen