Ich habe 2 Matrizen; Matrix A und Matrix B.Hinzufügen von Zahlen basierend auf 2 Matrizen nach einer Bedingung Matlab
Matrix A = [1 3 6 2 7;
2 1 5 3 4;
8 3 7 2 1]
Matrix B = [0 0 1 0 0;
0 0 0 0 1;
0 1 0 0 0]
und ich möchte überprüfen, ob die ‚1‘ in Matrix B
in einem Ort in der Matrix platziert ist A
wo es größer oder gleich 6
dann lassen Sie es wie es ist. Aber wenn es kleiner als 6
ist, dann gehen Sie zu der Stelle der Zahl, die kleiner ist als diese Zahl in der Matrix A
und setzen Sie eine "1" an dieser Stelle in Matrix B
und fügen Sie die 2 Zahlen und überprüfen Sie erneut, ob die Summe gleich ist oder größer als 6
und so weiter. Wie Sie in Matrix B
Zeile 2 sehen können, wird die 1
anstelle von 4
in Matrix A
gesetzt. Da die 4
weniger als 6
ist, dann gehe ich zu der zweiten kleineren Nummer als die 4
welche in diesem Fall 3
ist und addiere 3
und 4
zusammen. Dies wird uns 7
geben, was größer ist als 6
, also werden wir aufhören. So, hier zum Beispiel wird die Ausgangsmatrix sein:
Matrix output = [0 0 1 0 0;
0 0 0 1 1;
0 1 0 1 1]
Die Schritte:
Gehen Sie auf die Nummer, die gerade kleiner als es ist. gehen in diesem Fall bis 3, wie es derjenige ist, der gerade kleiner ist als der 4. ist ich mehr erklären kann:
Prüfung der Ort der 1 in Matrix B und sehen Sie seinen Wert in Matrix A.
Wenn die Zahl in Matrix A größer als 6 ist, belassen Sie sie so, wie sie ist, und belassen Sie die 1 in Matrix B so, wie sie ist, und gehen Sie in eine andere Zeile.
Wenn die Zahl in Matrix A kleiner als 6 ist, dann, was wir wollen, ist, dass wir diese Zahl auf eine andere Nummer hinzufügen möchten, und es gleich machen oder größer als 6.
Diese Zahl ist die, das ist nur kleiner als es. Wenn zum Beispiel die Reihe [2 5 6 1 3] hat und die 1 an der Stelle der 5 steht, ist 5 kleiner als die Beschränkung. Also müssen wir zu den 3 gehen, da es kleiner ist als die 5 und sie addieren.
Fügen Sie nach dem Hinzufügen 1s in die Stellen beider Zahlen ein und überprüfen Sie die Bedingungen erneut. Wenn es die Bedingung erfüllt, lassen Sie sie und gehen Sie in eine andere Zeile. Wenn nicht gehen Sie die, die nur kleiner als die Zahl ist, und das gleiche tun.
Vielen Dank.
Dieser Code funktioniert, wenn die Matrix B
leer ist und die 1 an die Stelle der höchsten Zahl setzt und die Einschränkung überprüft. Wenn es weniger als die Zahl ist, wird es in die zweithöchste Zahl gehen und hinzufügen und nochmals überprüfen und so weiter .. Aber was ich will jetzt ist es zu lösen mit vordefinierten 0
s und 1
s
B=zeros(size(A));
for k=1:size(A,1)
a=A(k,:)
[b,ia]=sort(a,'descend')
c=cumsum(b)
jj=find(c>=6,1)
idx=ia(1:jj)
B(k,idx)=1
end
Kann es mehr als 1 1 in der Matrix B geben? – GameOfThrows
ja @GameOfThrows –
Also sagen wir, es gibt zwei 1s in Matrix B, und beide sind kleiner als 6, beide benötigen ein gemeinsames Element, um 6 zusammenzufassen - ist es immer noch eine 1 für dieses Element oder ist es eine 2? – GameOfThrows