WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matrixelemente durchlaufen und tauschen

 

Alex2323
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 20:00     Titel: Matrixelemente durchlaufen und tauschen
  Antworten mit Zitat      
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 !
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2017, 20:33     Titel:
  Antworten mit Zitat      
Hallo,

ein Beispiel wäre hilfreich. Auf den ersten Blick würde ich sagen:
Code:
toSwap = (A==1);
A(toSwap) = G(toSwap);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex2323
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 20:54     Titel:
  Antworten mit Zitat      
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)),Smile;

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2017, 22:01     Titel:
  Antworten mit Zitat      
Hallo,

hast du meinen Vorschlag anzuwenden versucht?
Hat es funktioniert, und wenn nicht: welche Probleme sind dabei aufgetreten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex2323
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 22:16     Titel:
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2017, 22:20     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex2323
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 23:03     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2017, 23:38     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ohh, da habe ich vergessen i mit reinzukopieren.

Dann wäre es doch geschickt, das jetzt nachzuholen?

Neuer Vorschlag:
Code:
random_Z(random_Z(:,1) == 1 , 1) = G;


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex2323
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2017, 23:56     Titel:
  Antworten mit Zitat      
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)),Smile;
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.10.2017, 19:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider folgt aus dem Code ein Dimensionsfehler...

Weil du Dimensionen geändert hast. So läuft's:

Code:
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);

random_Z(random_Z(:,1) == 1 , 1) = G;


so auch:
Code:
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);

toSwap = (random_Z==1);
random_Z(toSwap) = G;


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex2323
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 04.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2017, 14:51     Titel:
  Antworten mit Zitat      
HAMMER! Das klappt sehr gut !

Vielen Dank für die schnelle Hilfe !

Gruß Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.