2017-05-24 10 views
0

So habe ich diese MatrixMatlab Entscheidung Output basierend auf Matrix Zustand

A= 
7 

B= 
0.34 0.34 0.34 
0.50 0.25 0.25 

und diese Matrix

C= 
1 
1 
4 
2 
3 
6 
3 

mit dieser Regel:

  • wenn C = 1 dann ist der Ausgang = Summe (A * (B erste Reihe))
  • wenn C = 2 dann ist der Ausgang = Summe (A * (B 2. Reihe))
  • wenn C nicht 1 oder 2 ist, dann Ausgang = C-Wert

oder allgemein:

  • , wenn die C-ten Zeile in B besteht dann die Ausgabe = SUMME (A * (C- te Zeile von B))
  • ansonsten output = C-Wert

So sollte die Ausgabe wie folgt sein:

output= 
7.14 
7.14 
4 
7 
3 
6 
3 

Ich versuche, diesen Code verwenden, aber es ist nicht

sizeA=size(A,1) 
sizeB=size(B,1) 
for i=1:sizeB 
    if (B(i)<=sizeA) 
     Output=sum(repmat(A,1,length(C))'.*B(C,:),2) 
    else 
     Output=C(i) 
    end 
end 
+0

Ist Ihre Bedingung abhängig von der Anzahl der Zeilen in 'B'? Wenn eine dritte Zeile existiert, sollte man sie benutzen oder nicht? Bitte erwähnen Sie es in Ihrer Frage, wenn dies der Fall ist. Die Formulierung Ihrer Frage ist oft ein großer Schritt, um die Lösung zu finden. – m7913d

+0

yeps es hängt von den Zeilen in B ab, also wenn es eine dritte Zeile auf B gibt, sollte es auch gezählt werden –

Antwort

0

Der richtige Code ist nicht funktioniert:

sizeA=size(A,1); 
sizeB=size(B,1); 
sizeC=size(C,1); 
Output = zeros(size(C)); % preallocate memory for efficiency 
for i=1:sizeC 
    if C(i)<=sizeB 
     Output(i)=sum(A * B(C(i), :)); 
    else 
     Output(i)=C(i); 
    end 
end 

Sie können auch eine in der folgenden Art und Weise für die Schleife vermeiden:

% make B of the same size as C 
B_ = zeros(size(C)); 
B_(1:size(B, 1)) = sum(B, 2); 
% calculate the output 
output = C .* (C > size(B, 1)) + A .* B_(C) 

Bitte versuchen Sie den Code zu verstehen und nicht nur zu verwenden.

0

Ich vereinfachte ein wenig. Es klappt.

for i=1:length(C) 
num=C(i); 
switch num 
case 1 
output(i)=sum(A*B(1,:)) 
case 2 
output(i)=sum(A*B(2,:)) 
otherwise 
output(i)=C(i); 
end 
end 

output = 

    Columns 1 through 5 

    7.1400 7.1400 4.0000 7.0000 3.0000 

    Columns 6 through 7 

    6.0000 3.0000 
+0

Obwohl dies nicht explizit angefordert wird, funktioniert dies nicht für allgemeine 'B' Matrizen mit einer anderen Anzahl von Zeilen. – m7913d

+0

sollte es eigentlich funktionieren Ich schätze – 16per9

+0

Nein, weil Sie die zusätzlichen Zeilen nicht verwenden oder auf nicht vorhandene zugreifen. Basierend auf dem Code, den er zur Verfügung gestellt hat, denke ich, dass er die Zeile verwenden möchte, wenn "B" vorhanden ist. – m7913d