Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Buchempfehlung erbeten

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Shuffle zusammengehörige Werte eines Vektors

 

Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2019, 12:39     Titel: Shuffle zusammengehörige Werte eines Vektors
  Antworten mit Zitat      
Hi alle miteinander,

ich habe folgende Matrix: m=[0 0 2 2 1 1 0 2 1];
Nun möchte ich die ersten drei Blöcke (also 0 0, 1 1, 2 2) jeweils zusammengehörig shuffeln, sodass z.B. [1 1 2 2 0 0, 1 2 0] uns das ganze am besten 50 Mal hintereinander hängen.

Die Shuffle-Funktion ist hierbei bis jetzt nicht sehr hinflreich, da sich nicht jeweils zusammengehörige Werte shuffeln lassen.
Jemand eine Idee, wie das trotzdem ginge?

DANKE und LG


Harald
Forum-Meister

Forum-Meister


Beiträge: 22.013
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.09.2019, 15:04     Titel:
  Antworten mit Zitat      
Hallo,

du kannst ein Cell Array daraus machen, das Cell Array shufflen (ich würde randperm verwenden), und das dann zurückwandeln.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2019, 16:56     Titel:
  Antworten mit Zitat      
Hi Harald,

das shuffeln funktioniert so nicht, da ich keine Blöcke shuffeln kann, oder?
Ich dachte eher an eine for Schleife, z.B.

Liebe Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.013
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.09.2019, 17:02     Titel:
  Antworten mit Zitat      
Hallo,

die Frage ist nur, wie du das ominöse Shufflen machst. Wenn du es mit randperm machst, kein Problem:

Code:
m = {[0 0], [2 2] , [1 1], 0, 2, 1}
m2 = m(randperm(numel(m)))
cell2mat(m2)


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2019, 18:48     Titel:
  Antworten mit Zitat      
Hi Harald,

danke für deinen Ansatz, das sieht gut aus!

Leider geht es nicht auf, wenn ich den Code ausführe, da durch cell2mat leider die Reihenfolge durcheinander gebracht wird. Dies würde bei mind. 20 Wiederholungen ein Problem darstellen.

Danke und Grüße
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2019, 19:00     Titel:
  Antworten mit Zitat      
Hyper hat Folgendes geschrieben:
Hi Harald,

danke für deinen Ansatz, das sieht gut aus!

Leider geht es nicht auf, wenn ich den Code ausführe, da durch cell2mat leider die Reihenfolge durcheinander gebracht wird. Dies würde bei mind. 20 Wiederholungen ein Problem darstellen.

Danke und Grüße


Sorry, ich korriegiere mich: Das Ranperm unterbricht die fest reinfolge, dass immer erst die doppelten Werte und als letzte drei die einzelnen in entsprechender Reihenfolge kommen sollen.
 
Harald
Forum-Meister

Forum-Meister


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

dann mit [1 2 0] arbeiten, randperm anwenden, und das Ergebnis vorweg verdoppeln mit repelem .

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2019, 10:33     Titel:
  Antworten mit Zitat      
Hi Harald,

das Problem ist damit leider nicht gelöst. Es funktioniert nicht, das die Blöcke als auch duie Reihenfolge erhalten bleiben.
Ich glaube, man kommt um eine for-Schleife nicht herum.

Randperm scheint nicht der richtige Befehl zu sein, da es keine Rücksicht auf interner Reihenfolgen nimmt.

Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.013
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2019, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

es ist eine Lösung des Problems so, wie ich es verstanden habe.
Du möchtest einerseits etwas zufällig vertauschen, andererseits soll eine Reihenfolge erhalten bleiben. Was soll nun zufällig sein und was nicht?

Hast du es denn mit einer for-Schleife versucht? Was genau hast du versucht, und welche Probleme sind dabei aufgetreten?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2019, 10:49     Titel:
  Antworten mit Zitat      
Hi Harald,

tut mir Leid, dass ich mich so undeutlich ausgedrückt habe; ich versuch es nochmal:

Ich gehe von folgendem Vektor aus: v = [ 0 0 1 1 2 2 0 1 2]
Dieser Vektor soll nun 20 Mal wiederholt und aneinander gepackt werden.

Bei jeder Wiederholung soll die Reihenfolge der "gedoppelten" Zahlen random sein (aber jede Reihenfolge gleich oft vorkommen). Die letzten drei Zahlen haben sich dieser Reihenfolge anzupassen. Also wären z.B. die nächsten, möglichen Wiederholungen: [1 1 0 0 2 2 1 0 2 2 2 1 1 0 0 2 1 0] und so weiter.

Ich bin bisher nicht weiter gekommen, als das:

mod=zeros(20,1);
k=1;
for i= 1:20
mod(i)=repmat(m,20,1)) ??
k=k+1;
end
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.013
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2019, 11:42     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das nun richtig verstanden habe:

Code:
m = {[0 0], [2 2] , [1 1], 0, 2, 1};
allM = [];
for k = 1:20
    seq = randperm(3);
    allM = [allM; cell2mat([m(seq), m(seq+3)])];
end
allM


Ich habe die Folgen der Übersichtlichkeit halber untereinander geschrieben, aber du kannst sie natürlich auch nebeneinander schreiben.

Wenn das immer noch nicht das gewünschte ist, bitte präzise beschreiben, was nicht passt.
Ich verstehe z.B. nicht, was "(aber jede Reihenfolge gleich oft vorkommen)" heißen soll. Bei zufälliger Auswahl ist es ja nun gerade so, dass nicht unbedingt jede Reihenfolge gleich oft vorkommt. Und in deinem Fall hast du 20 Iterationen und 6 mögliche Reihenfolgen. Es ist also überhaupt nicht möglich, dass jede mögliche Reihenfolge gleich oft vorkommt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Hyper

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2019, 12:03     Titel:
  Antworten mit Zitat      
Hi Harald,

das sieht perfekt aus (es fehlt nur noch, dass es ein 20x1 Vektor ist, aber das sollte ich hinkriegen).

Danke für deine Geduld! Smile
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.013
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.09.2019, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

wirklich ein 20x1 Vektor (das wären doch dann nur 2 Kombinationen und der Anfang einer dritten??) oder eher ein Cell mit 20 solcher Kombinationen?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.