2017-05-26 3 views
0

Betrachten Sie zwei n durch n-1-Matrix und einen n durch 1 Vektor (zum Beispiel können wir sie in der Reihenfolge A, B und v nennen). Elemente von v sind null oder eins. Wenn Element v (m, 1) gleich eins ist, möchte ich Elemente A (1: m-1, m-1) durch B (1: m-1, m-1) und Elemente A (m + 1 : n, m) mit B (m + 1: n, m). Wie kann ich das tun? Könnte jemand helfen? Um die Frage klarer zu machen, betrachten Sie das folgende Beispiel.Ändern der Elemente von zwei Matrix in einer Bedingung Matlab

Beispiel:

A=[1,2,3;4,5,6;7,8,9;12,13,14] 
B=[3,4,5;6,7,8;9,10,11;6,5,3] 
v=[0,1,0,1] 

Ergebnis sollte sein:

result = [3,2,5; 4,5,8; 7,10,11; 12,5,14]

+0

Ihre 'v' 4 Elemente und A und B sind 4x3. Also ist A (m + 1: n, m) außerhalb des Bereichs, wenn v (4) = 1 ist. – jarmond

+0

Ja v hat 4 Elemente, daher sollte man nicht die zweite Änderung in Bezug auf A berücksichtigen (4 + 1: n, 4). Als Ergebnis habe ich –

Antwort

0

ist eine Alternative, mit logischer Indizierung:

temp = A; 
ind = 1:size(v,2); 
for k = ind(v==1) 
    if k<=size(A,2)+1 
     A(1:k-1,k-1) = B(1:k-1,k-1); 
     B(1:k-1,k-1) = temp(1:k-1,k-1); 
     if k<size(A,2) 
      A(k+1:end,k) = B(k+1:end,k); 
      B(k+1:end,k) = temp(k+1:end,k); 
     end 
    end 
end 
0

Sie können das gewünschte Ergebnis mit Hilfe find, acheive die die Indizes für nicht-Null-Elemente gibt, und eine for -loop:

R = A; % assuming you've set A, B and v already. 
n = size(A,1); 
v1 = find(v); 
for i=1:length(v1) 
    m=v1(i); 
    if m>1 
    R(1:m-1,m-1)=B(1:m-1,m-1); 
    end 
    if m<n 
     R(m+1:end,m)=B(m+1:end,m); 
    end 
end 

Wie ich in einem Kommentar darauf hingewiesen habe, muss v Länge n-1 haben, wenn v(n-1)=1 ansonsten m+1:end ist kein gültiger Indexbereich.

Bearbeitet, um die zweite Zuweisung optional wie in den Kommentaren vorzunehmen. Hier

+0

in dem Fall gezeigt, in dem v (n) = 1, (wie in dem Beispiel, das ich brachte), gibt es kein Element n + 1 in der Matrix A und es ist ausreichend, die erste Bedingung zu ersetzen (Ersetzen Sie die Elemente A (1: m-1, m-1) durch B (1: m-1, m-1)). Also ist v ein n mal 1 Vektor. Ist das klar? Bitte schau dir das Beispiel an. Wenn es nicht klar ist, lass es mich wissen –

Verwandte Themen