|
|
|
for-Schleife bei Permutation umgehen |
|
| breat |

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 11:03
Titel: for-Schleife bei Permutation umgehen
|
 |
Hallo an alle,
hier habe ich ein Problem für Tüftler (glaube ich zumindest). Ich habe eine 3-dimensionale Matrix A, aus der ich 10000 mal ziehe mit Zurücklegen. Dabei soll die Struktur in der dritten Dimension, erhalten bleiben. Der Befehl
liefert mir genau das, was ich meine (wobei n die Größe der ersten Dimension ist). Nun meine Frage: Ist es irgendwie möglich, diese Vorschleife zu umgehen, da sie mir zu viel Zeit kostet? Ich dachte an so was wie reshape, shiftdim etc., aber ich hab es nicht hinbekommen...
Danke schon mal!
|
|
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 11:08
Titel:
|
 |
|
halt, Korrektur: es muss rand(1,n) statt rand(n,1) heißen, sorry!
|
|
|
|
| Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 11:12
Titel:
|
 |
|
hast du den speicher vorher allokalisiert? das ist normalerweise eine ursache warum forschleifen sehr langsam laufen
|
|
|
|
| Gast1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 11:29
Titel:
|
 |
Hi,
ob du rand(1,n) oder rand(n,1) nimmst, ist in diesem Fall egal.
Bist du dir sicher, dass du so Ziehen willst?
Beim 1. mal Ziehen, ziehst du 10 Spalten aus der der Teilmatrix A(n,m,1)
Beim 2. mal Ziehen, ziehst du 10 Spalten aus der der Teilmatrix A(n,m,2)
usw.
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 12:17
Titel:
|
 |
Bei rand(n,1) hab ich aber irgendwie eine Fehlermeldung bei der for-Schleife bekommen.
Ja, genau so möchte ich ziehen. Es soll zu jedem Zeitpunkt (letzte Dimension) eine zufällige Auswahl getroffen werden (mit Wiederholung, daher ist ja eigentlich der Begriff Permutation falsch, fällt mir gerade auf), allerdings nicht über die zweite Dimension hinweg (für m=3 bei B sollen also auch nur Werte für m=3 aus A genommen werden).
Die for-Schleife liefert mir also wirklich genau das, was ich will, auch wenn es etwas seltsam wirkt, ich habs ausprobiert. (Wenn es dich interessiert: ich brauche es für das Boot-strap-Verfahren)
|
|
|
|
| Gast1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 12:23
Titel:
|
 |
|
Hat sich das Geschwindigkeitsproblem denn mit der Preallocation von B gelöst?
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 12:33
Titel:
|
 |
nein, das ist sie natürlich schon. Die Schleife macht vor allem deshalb Probleme, weil sie wiederum in einer drin ist, um die ich nicht drum rum komme.
Was die Sache so fies macht, ist für mich, dass man jeweils nur innerhalb der zweiten Dimension ziehen darf, die Auswahl aber weder bzgl. der ersten noch der letzten Dimension gleich sein darf.
|
|
|
|
| Gast1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 13:39
Titel:
|
 |
|
|
|
| Gast1 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.01.2012, 13:45
Titel:
|
 |
Sorry,
Die Lösung ist natürlich quatsch
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.01.2012, 16:24
Titel:
|
 |
|
ich hab schon gedacht, dass ich die Lösung gefunden hätte. Leider Fehlalarm, da ich meine letzte Aussage korrigieren muss: das Ziehen bezüglich der ersten Dimension soll gerade gleich sein (wie man an der for-Schleife sieht)... ich glaub ich werd hier noch verrückt!
|
|
|
|
| samsa10 |

Forum-Fortgeschrittener
|
 |
Beiträge: 50
|
 |
|
 |
Anmeldedatum: 10.12.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.01.2012, 19:05
Titel:
|
 |
Hallo!
Bin das jetzt nicht genau durchgegangen, deshalb ist es wohl nicht die schönste Variante und weiss auch nicht ob's schon lauffähig ist (nicht getestet), aber ca. so dürfte es funktionieren:
Gehe mal davon aus, deine Matrix A hat die Dimension (n x n x h) mit h>=10000.
Generell könnte man hier aber auch parfor empfehlen. Deine Schleife ist
keine "echte" Iteration, somit würde sich parfor anbieten und der Code bleibt damit auch übersichtlicher.
Grüße samsa
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.01.2012, 12:56
Titel:
|
 |
Danke für den Vorschlag, aber leider liefert er nicht das, was ich brauche.
Aber der Tipp mit dem parfor ist echt super!! Danke!
|
|
|
|
| Andy386 |

Forum-Guru
|
 |
Beiträge: 485
|
 |
|
 |
Anmeldedatum: 24.06.09
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.1/8
|
 |
|
|
 |
|
Verfasst am: 22.01.2012, 02:32
Titel:
|
 |
samas Code sieht aber schon gut aus...
Kannst du einen Beispieldatensatz veröffentlichen, damit man die Ergebnisse gegenrechnen kann?
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
|
|
|
|
| breat |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 33
|
 |
|
 |
Anmeldedatum: 27.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.01.2012, 09:51
Titel:
|
 |
Ich nehme mal als Beispiel n = 3, h = 4 und
Dann bekomme ich z.B.
Mit samas Code ergibt sich
Das heißt, ich habe aus der ersten Spalte zweimal die zweite Zeile und dann die erste gezogen. Das müsste so dann aber auch in der zweiten und dritten Spalte gemacht werden, das heißt die zweite wäre dann [8 8 6]'. Genau das bekomme ich mit dieser for-Schleife.
(Wahrscheinlich habe ich mein Problem einfach nicht gut genug beschrieben, sorry...!)
Und ach ja, eigentlich ist es nicht eine (n x n x h)-Matrix, sondern eine (m x n x h)-Matrix.
|
|
|
|
| samsa10 |

Forum-Fortgeschrittener
|
 |
Beiträge: 50
|
 |
|
 |
Anmeldedatum: 10.12.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.01.2012, 12:28
Titel:
|
 |
Hallo!
Das war etwas zu schnell, ganz so einfach geht es leider doch nicht. Falls du es dir noch selbst überlegen willst, der Fehler lag natürlich beim Reshape.
Alles in Allem war dein Problem jetzt doch noch knifflig.
So sollte es funktionieren:
Auf die Adaptionen für die (m x n x h) - Matrix kommst du vielleicht noch selbst.! Ansonsten melde dich.
Grüße samsa
|
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
|
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 - 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.
|
|