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

Inhalt von zwei Mtrizen gleichmässig verteilen

 

FCO
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 01.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2012, 10:09     Titel: Inhalt von zwei Mtrizen gleichmässig verteilen
  Antworten mit Zitat      
Hallo,

wir möchten gerne für unsere Experiment aus 2x30 Fragen
zwei Gruppen erstellen, in denen jeweils 15 fragen aus Block 1 und 15 Fragen aus Block 2 enthalten sind.

Beispiel:
Jede Frage hat eine eigene Zahl von 1- 60
m=(1:30);
r=(31:60);


Diese Zahlen sollen so aufgeteilt werden, dass Block A 15 zufällig gewählte Fragen aus m enthält und block B dann die verbleibenden 15 Fragen aus m bekommet. Das gleiche dann mit r. 15 kommen zu Block A hinzu und die verbleibenden zu Block B. Das ganze brauchen wir 40 mal.

Wir sind alles ziemliche Matlab Neulinge und haben zwar etwas geschafft, was funktioniert ber das ist relativ umständlich, deswegen wende ich mich an die Profies, die das bestimmt eleganter lösen Wink

Vielen Dank im Vorraus Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

spontan fällt mir ein:
Code:
allr = 30 + randperm(30);
r1 = allr(1:15);
r2 = allr(16:end);

genauso für m (nur ohne 30 +) und dann eine for-Schleife.

Eleganter:
Code:
[~, r] = sort(rand(30,40));
r = r + 30;
r1 = r(1:15,:);
r2 = r(16:end,:);

und man hätte gleich 40 Kombinationen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 01.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2012, 11:03     Titel:
  Antworten mit Zitat      
Vielen Dank für deine schnelle Antwort Smile

aber bekommt man dann nicht immer in Block A die 15 ersten Fragen aus m?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ihr müsst beide Vorgehensweisen auf m und r separat anwenden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 01.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2012, 21:31     Titel:
  Antworten mit Zitat      
Nochmal Danke Smile

Wir wollten bei m die Fragen von 1- 30 und bei r die fragen 31 bis 60 drin haben und letztenendes soll dass auf zwei Blöcke verteil werden.
Und wenn ich den Code richtige verstehe (was ich bezweifle) dann geht man dort die nummer von 1-30 durch, oder?

Also in block A müsen 15 Fragen mit den Nummern <15
und 15 Fragen mit den Nummern >15 enthalnten sein.
und das Komplement
(also das, was aus m und r nhicht Block A zugewiesen wurde)
muss dann quasi Block B zugewiesen werden

Beste Grüße
FCO
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

zusammensetzen müsst ihr A bzw. B schon noch, aus r1 und m1 bzw. r2 und m2.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 01.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2012, 08:23     Titel:
  Antworten mit Zitat      
Nochmal Hallo Smile

Mit dem Code

Code:
[~, r] = sort(rand(30,40));
r = r + 30;
r1 = r(1:15,:);
r2 = r(16:end,:);
 


bekomme ich leider mehrfache Einträge der Zahlen und nur Zahlen >=30 Sad
z.B. die erste Zeile von r1:

57 46 54 38 38 31 58 58 43 46 35 32 37 51 41 33 50 54 48 41 34 47 37 57 60 39 60 47 53 58 59 58 36 46 50 40 36 53 57 45

Ich glaube ich drücke mich zu missverständlich aus Sad
Aber trotzdem danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Kombinationen stehen ja auch in den Spalten von r1 bzw. r2.

Natürlich nur Zahlen >= 30, weil du das wie gesagt genauso mit m machen und das dann zusammenfügen musst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 04.06.2012, 11:07     Titel:
  Antworten mit Zitat      
Elegant? Meine Spezialität Wink

Code:

% Ziehe 15 Zahlen aus 1-30  und  15 Zahlen aus 30-60
A = [ randperm(30,15)   randperm(30,15)+30 ]


% B sind alle Zahlen von 1:60 außer die in A
B = setxor(1:60,A)
 


Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
FCO
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 01.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2012, 09:37     Titel:
  Antworten mit Zitat      
Danke für die Antworten Smile

@Harald
Sorry, ich habe auf die Zeilen geschaut, weill unser Code das so gemacht hat Wink
Aber hst Recht, sieht super aus Smile
Nur wüßte ich nicht, wie ich was für m ändern könnte,
um die Zahlen von 1-30 zu bekommen Sad

Code:
[~, r] = sort(rand(30,40));
r = r + 30;
r1 = r(1:15,:);
r2 = r(16:end,:);


@Bluesmater
Sieht wirklich elegant aus Wink
Doch Leider funktioniert das nicht bei mir :/
Bekomme die Fehlermeldungen

??? Error using ==> randperm
Too many input arguments.

Error in ==> test at 2
A = [ randperm(30,15) randperm(30,15)+30 ]


Bekommen A und B auch beide jeweils 30 Zahlen zugewiesen?
Und auch nach dem Muster 15 davon <30 und die anderen 15 >30?

Btw
hat jemand ein gutes Tutorial oder Buch, welches er mir empfehlen kann?

Beste Grüße
FCO
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Nur wüßte ich nicht, wie ich was für m ändern könnte,
um die Zahlen von 1-30 zu bekommen

Du brauchst nur das "r = r + 30" weglassen.

Zitat:
Bekomme die Fehlermeldungen

Vermutlich verwendest du eine MATLAB-Version, die diesen Aufruf noch nicht unterstützt. Am besten angeben, mit welchem Release man arbeitet, damit die Antworten ggf. darauf abgestimmt werden können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 05.06.2012, 11:13     Titel:
  Antworten mit Zitat      
Ich teste meinen Code immer. Das heist deine Matlab-Version ist älter.

Das heist du musst das kombinatorische Problem "Ziehe 15 aus 30, ohne zurücklegen, ohne Reihenfolge" anders lösen:

Gibts viele Möglichkeiten:

1. Schleife die per Zufall eine Position einer "1:30 Matrix" auswählt
(und die gezogene herauslöscht)

2. Per Zufall eine Reihe aus der "nchoosek(30,15) Matrix" herauspicken
(extrem Rechenlastig)

3.
Oder z.B. jede 2. Position der "randperm(30)" übernehmen siehe Bsp:

Code:

rp = randperm(30)
A = [ rp(1:2:30)   rp(1:2:30)+30 ]
B = setxor(1:60,A)
 



Der Verlust einer Zeile schmerzt natürlich auf der Eleganzskala Wink

PS: Ich empfehle "Matlab Kompakt" > Kondensiert, ohne viel BullS****
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 - 2025 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.