|
|
Matrixelemente durchlaufen und tauschen |
|
Alex2323 |
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2017, 20:00
Titel: Matrixelemente durchlaufen und tauschen
|
|
Guten Abend,
ich würde gerne die die Komponenten der Matrix A Spaltenweise durchlaufen und die Elemente in der eine 1 enthalten ist mit den Elementen aus der selben Spalte und Zeile einer Matrix G vertauschen. Ich weiß, dass dies mit einer for schleife oder if schleife funktioniert, jedoch weiß ich nicht wie ich das implementieren soll. Vielleicht kennt jemand ein Befehl dazu?
Danke im voraus !
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.10.2017, 20:33
Titel:
|
|
Hallo,
ein Beispiel wäre hilfreich. Auf den ersten Blick würde ich sagen:
Grüße,
Harald
|
|
|
Alex2323 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2017, 20:54
Titel:
|
|
Danke schon einmal für die schnelle Antwort!
Also mein Quellcode sieht wie folgt aus.. Da wir nur bestimmte Anzahlen von Einsen und Nullen in der Matrix haben dürfen habe ich es einfachhaltshalber so gemacht:
z1=ones(10,1);
z2=zeros(10,1);
z3=[ z1; z1; z1; z2; z2; z2; z2; z2; z2; z2];
z4=[ z2; z2; z2; z1; z1; z1; z1; z1; z2; z2];
z5=[ z2; z2; z2; z2; z2; z2; z2; z2; z1; z1];
Z=[ z3 z4 z5];
random_Z = Z(randperm(size(Z, 1)),;
G=normrnd(50,5,30,1);
Falls nun eine 1 in der Z-Matrix enthalten ist, soll diese durch eine Komponente aus der G Matrix ersetzt werden. Die Stelle der Komponente soll gleich sein, das heißt wenn die erste Komponente der Matrix Z eine 1 enthält soll diese durch die 1. Komponente der Matrix G vertauscht werden.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.10.2017, 22:01
Titel:
|
|
Hallo,
hast du meinen Vorschlag anzuwenden versucht?
Hat es funktioniert, und wenn nicht: welche Probleme sind dabei aufgetreten?
Grüße,
Harald
|
|
|
Alex2323 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2017, 22:16
Titel:
|
|
Ich habe es versucht, aber funktioniert hat es nur für die erste Komponente leider...
Das ist der Code, mit dem ich es versucht habe...
j=100
if i<j
if Z(i)==1
toSwap = (Z(i)==1)
Z(toSwap) = g1(toSwap)
end
i=i+1
end
Vielen lieben Dank!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.10.2017, 22:20
Titel:
|
|
Hallo,
ich verstehe das nicht recht.
Sollten dazu nicht random_Z und G die gleichen Dimensionen haben?
Selbst wenn das nicht: wie sollen die 100 Einsen in random_Z denn zu den 30 Elementen von G passen?
Was in dem Code die if-Abfragen sollen, ist mir schleierhaft. Lauffähig ist der Code so oder so nicht, weil i nicht definiert ist.
Grüße,
Harald
|
|
|
Alex2323 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2017, 23:03
Titel:
|
|
Ohh, da habe ich vergessen i mit reinzukopieren. Im jeden fall sollen eigentlich die erste Spalte der Matrix Z durchlaufen werden und durch die Werte von der Matrix G ersetzt werden. Es sind Maximal 30 1-en enthalten, weil die Matrix so definiert wurde, daher die andere Dimension. Ich hoffe, dass ich etwas erklären konnte. Bin mir selber nicht so sicher, ob ich das richtig mache. Nutze Matlab erst seit einigen Tagen und bringe es mir quasi selber bei..
Danke!!
Gruß Alex
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 05.10.2017, 23:38
Titel:
|
|
Hallo,
Zitat: |
Ohh, da habe ich vergessen i mit reinzukopieren.
|
Dann wäre es doch geschickt, das jetzt nachzuholen?
Neuer Vorschlag:
Grüße,
Harald
|
|
|
Alex2323 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.10.2017, 23:56
Titel:
|
|
Leider folgt aus dem Code ein Dimensionsfehler...
Also bis dato habe ich so viel Programmiert:
z1=ones(10,1);
z2=zeros(10,1);
z3=[ z1; z1; z1; z2; z2; z2; z2; z2; z2; z2];
z4=[ z2; z2; z2; z1; z1; z1; z1; z1; z2; z2];
z5=[ z2; z2; z2; z2; z2; z2; z2; z2; z1; z1];
Z=[ z3 z4 z5];
random_Z = Z(randperm(size(Z, 1)),;
G=normrnd(50,5,100,1);
um nun die Elemente der Matrix Z mit der aus G zu tauschen habe ich mir folgendes überlegt:
if Z(i)==1
Z(i)=G(i)
else
Z(i)=Z(i)
end
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 06.10.2017, 19:06
Titel:
|
|
Hallo,
Zitat: |
Leider folgt aus dem Code ein Dimensionsfehler... |
Weil du Dimensionen geändert hast. So läuft's:
so auch:
Du musst dich halt nur entscheiden, was du willst.
Zitat: |
um nun die Elemente der Matrix Z mit der aus G zu tauschen habe ich mir folgendes überlegt:
if Z(i)==1
Z(i)=G(i)
else
Z(i)=Z(i)
end |
Dann musst du das nur noch in eine Schleife über alle Elemente packen. Und was hält dich davon ab, den viel effizienteren und kompakteren Vorschlag von mir umzusetzen?
Grüße,
Harald
P.S.: Bitte die Code-Umgebung verwenden.
|
|
|
Alex2323 |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 11
|
|
|
|
Anmeldedatum: 04.10.17
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 07.10.2017, 14:51
Titel:
|
|
HAMMER! Das klappt sehr gut !
Vielen Dank für die schnelle Hilfe !
Gruß Alex
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|