ÜbersichtMATLAB - eine Matrix von Summen von Elementen Zurückkommend auf die gleiche Art entsprechenden
Eine n×m
Matrix A
und einen n×1
Vektor Date
sind die Eingänge der Funktion S = sumdate(A,Date)
.
Die Funktion gibt einen n×m
Vektor S
, so daß alle Zeilen in S
die Summe der Zeilen von A
ab dem gleichen Zeitpunkt entsprechen.
Zum Beispiel, wenn
A = [1 2 7 3 7 3 4 1 9
6 4 3 0 -1 2 8 7 5]';
Date = [161012 161223 161223 170222 160801 170222 161012 161012 161012]';
Dann würde ich die zurückgegebene Matrix erwarten S
ist
S = [15 9 9 6 7 6 15 15 15;
26 7 7 2 -1 2 26 26 26]';
Da die Elemente
Date(2)
undDate(3)
gleich sind, haben wirS(2,1)
undS(3,1)
beide gleich der Summe ausA(2,1)
undA(3,1)
S(2,2)
undS(3,2)
beide gleich der Summe ausA(2,2)
undA(3,2)
.
Da die Elemente
Date(1)
,Date(7)
,Date(8)
undDate(9)
gleich sind, haben wirS(1,1)
,S(7,1)
,S(8,1)
, gleichS(9,1)
die Summe vonA(1,1)
,A(7,1)
,A(8,1)
,A(9,1)
S(1,2)
,S(7,2)
,S(8,2)
,S(9,2)
gleich die Summe vonA(1,2)
,A(7,2)
,A(8,2)
,A(9,2)
Das gleiche gilt für S([4,6],1)
und S([4,6],2)
Als das Element Date(5)
nicht wiederholt, so S(5,1) = A(5,1) = 7
und S(5,2) = A(5,2) = -1
.
Der Code, den ich bisher
hier geschrieben haben, ist mein Versuch auf den Code für diese Aufgabe.
function S = sumdate(A,Date)
S = A; %Pre-assign S as a matrix in the same size of A.
Dlist = unique(Date); %Sort out a non-repeating list from Date
for J = 1 : length(Dlist)
loc = (Date == Dlist(J)); %Compute a logical indexing vector for locating the J-th element in Dlist
S(loc,:) = repmat(sum(S(loc,:)),sum(loc),1); %Replace the located rows of S by the sum of them
end
end
Getestet habe ich es auf meinem Computer A
und Date
mit diesen Attributen:
size(A) = [33055 400];
size(Date) = [33055 1];
length(unique(Date)) = 2645;
Es ist mein PC Sekunden etwa 1,25 nahm die Aufgabe auszuführen.
Diese Aufgabe wird in meinem Projekt hunderttausende Male ausgeführt, daher ist mein Code zu zeitaufwändig. Ich denke, dass die Leistung gesteigert wird, wenn ich die obige Schleife eliminieren kann.
Ich habe einige eingebaute Funktionen gefunden, die spezielle Arten von Summen wie accumarray
oder cumsum
machen, aber ich habe immer noch keine Ideen, wie die For-Schleife zu beseitigen.
Ich würde Ihre Hilfe zu schätzen wissen.
Hinweis: Sie sollten 'verwenden .'' Matrices transponieren, nicht die komplexe konjugierte Transponierte' ' ' – Wolfie
Vielen Dank für Ihre Bearbeitung und Beratung. Du hast recht, ich sollte stattdessen '.'' verwenden, da ich in diesem Fall keine Konjugate benötige, in denen die Eingabe komplexe Zahlen enthält. – Leba
Kein Problem, ich beendete die Bearbeitung für Sie, aber in Zukunft versuchen und verwenden 'Code Formatierung' anstelle von ** fett formatieren ** Wenn Sie Code in Ihrem Text haben, macht es die Dinge viel klarer – Wolfie