2017-05-23 8 views
0

ich diese Matrix durchTeilen eines Matrix zeilenweise durch eine eigene Summe

K= 
0 0 1 
0 2 1 
0 1 1 

L= 
1 
3 
2 

wo L ist die Summe jeder Reihe von K

I benötigen, um eine neue Matrix durch jede Reihe von K Dividieren haben ihre Summe, beispielsweise aus der 2. Reihe [0 2 1] der Ausgabe, die ich ist [0 2/3 1/3] oder [0 0.67 0.33] bekommen sollte:

Output= 
0 0  1 
0 0.67 0,33 
0 0.5 0.5 

Ich versuche, diesen Code zu verwenden, bekam aber nur Nullen:

for i=1:3; 
    j=1:3; 
    if K(i,j)>0 
     K(i,j)=(K(i,j))/L(i) 
    else 
     K(i,j)=0 
    end 
end 

Wie kann ich jede Zeile von K durch seine eigene Summe teilen?

Antwort

0
K=[0 0 1; 0 2 1; 0 1 1]; % your matrix 
rowSum = sum(K, 2); % compute the sum 
K_norm = K./repmat(rowSum, 1, size(K, 2)); 

repmat hier baut eine Matrix mit den gleichen Abmessungen wie K aber wobei jede Spalte die Summe der Zeilen von K ist.

-1
K=[0 0 1 
0 2 1 
0 1 1 ]; 
L = sum(K,2) ; 
iwant = zeros(size(K)) ; 
for i = 1:size(K,1) 
    iwant(i,:) = K(i,:)/L(i) ; 
end 
+0

Haben Sie versucht, diesen Code? Sie werden zumindest elementweise Operationen wünschen. Bitte erläutern Sie diese Antwort und geben Sie eine genaue Erklärung, was dieser Code bewirkt und warum er das Problem des OP löst. – Adriaan

+1

Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erklärenden Kommentaren zu füllen, dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen! – kayess

0
K=[0 0 1 
0 2 1 
0 1 1 ]; 
L = sum(K,2) ; 
iwant = bsxfun(@rdivide,K,L) ; 
+0

Nochmals, bitte erläutern Sie die Antwort, um eine Erklärung zu geben, und posten Sie keine doppelten Antworten, sondern erweitern Sie einfach eine von ihnen. – Adriaan

0

Sie können es in zwei Zeilen schreiben; zuerst die Summe berechnen und dann repmat verwenden, um eine Matrix die gleiche Größe wie K zu machen und teilen element

L = sum(K,2); 
iwant = K./repmat(L,1,size(K,2)); 
Verwandte Themen