|
|
| TobinProject |

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 02.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 17:11
Titel: Array aus Zeilenvektoren
|
 |
Hi!
Ich versuche verzweifelt ein Array aus Vektoren zu erzeugen.
Konkret habe ich einen Spaltenvektor (
), der ganze Zahlen enthält.
Aus diesem Vektor möchte ich ein Array erzeugen, das jeweils in der ersten Spalten den Wert (ganzzahlig ist der schon) aus dem obigen Spaltenvektor hat und dann eine Reihe erzeugt bis runter zu 1; also
Probiert habe ich schon sämtliche kombinationen aus eckigen, runden, geschwungenen Klammern. Ich komme einfach nicht darauf wie es geht.
Beispiel:
Spaltenvektor = [0;2;5]
Wunschergebnis (3x5) =
0 0 0 0 0
2 1 0 0 0
5 4 3 2 1
Mein letzter Versuch:
Vielen Dank für Eure Hilfe
_________________
Bouchaud
www.tobin-project.com
|
|
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 17:42
Titel:
|
 |
Hallo,
ich bin wie immer für Versuche ohne for-Schleife offen, glaube aber, dass es nicht viel einfacher geht:
Grüße,
Harald
P.S.: bitte nach Möglichkeit immer den bisher vielversprechendsten Ansatz posten.
|
|
|
|
| TobinProject |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 02.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 19:12
Titel:
|
 |
Hallo Harald,
vielen Dank für die schnelle Antwort.
Ich arbeite in der Prototyp-Phase mit rung 900 Tausend Datensätzen. Ich habe an einer anderen Stelle erfolgreich eine For-Schleife ersetzen können. Diese ist damals 2h lang gelaufen. Nach Ersatz durch entsprechende Matrix-Manipulationen, konnte ich es unter 3,5 sek bringen.
Ich habe es jetzt mal mit einer for-Schleife probiert, wie Du vorgeschlagen hast, damit ich wenigstens mal das Ergebnis speichern kann. Der Code läuft aber jetzt auch schon 1,5h und ist noch nicht fertig.
Eine parfor bringt zwar noch eine erhebliche Effizienzsteigerung, jedoch bin ich noch immer in der Hoffnung, dies über Matrix-Manipulationen erreichen zu können.
mfG
Bouchaud
_________________
Bouchaud
www.tobin-project.com
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 19:49
Titel:
|
 |
Hallo,
bei so großen Datenmengen ist die Frage auch:
- Was willst du mit dem Ergebnis machen, hinsichtlich Weiterverarbeitung? Kann man das Ergebnis evtl. direkt erzeugen?
- Zudem: Wie groß sind die Einträge einer Spalte maximal?
Grüße,
Harald
|
|
|
|
| TobinProject |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 02.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 21:17
Titel:
|
 |
| |
 |
|
(Anrede lass ich mal weg, da wir uns ja jetzt schon so gut kennen )
Ich erzeuge über eine Zeitreihe (900kx1) Signale (0 und 1). Jedes dieser Signale erzeugt dann in weiterer Folge eine weitere Zeitreihe (990 x n).
Um zu bestimmen ab wann eine solche Zeitreihe aktiv ist - also ungleich null - muss zuerst der logische Vektor von oben (900k x 1; 0 und 1) umgewandelt werden in eine logische Matrix (900k x n).
Das wollte ich über den Zwischenschritt einer kumulierten Signalreihe "BB_Parameters(:,12)" erreichen.
Dieser Schritt muss 2 Mal ausgeführt werden - weil es noch ein weiteres Signal gibt, das das Ende der Gültigkeit der Einzelzeitreihen definiert.
Im Endeffekt folgen dann noch ein paar einfache Matrixmultiplikationen und statistische Auswertungen über die Einzelzeitreihen.
Deiner Frage nach der Größe entnehme ich, dass es evtl Sinn machen würde die Matrix als Integer zu deklarieren oder habe ich das falsch verstanden?
Die Zeitreihe selbst kann sehr sehr lang werden - derzeit schätze ich, dass eine für mich sinnvolle Zeitreihe ca. 240 Mio Datenpunkte hat.
mfG
Bouchaud
_________________
Bouchaud
www.tobin-project.com
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 02.11.2011, 21:38
Titel:
|
 |
Hallo,
ich kenne deine Anwendung nicht, kann das hier nicht wirklich nachvollziehen und kann daher nicht beurteilen, ob die Vorgehensweise so sinnvoll ist.
Nein, es ging mir nicht um Integerdatentypen, auch wenn das bei knapp werdendem Speicher natürlich auch eine Option ist. Der Gedanke war, die möglichen Zeilen zu erzeugen und dann zuzuweisen.
Grüße,
Harald
|
|
|
|
| TobinProject |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 02.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 03.11.2011, 11:48
Titel:
|
 |
| |
 |
|
Hallo Harald,
Vielen Dank für den Hinweis mit den "möglichen Kombinationen". Es stimmt auch wenn ich 240 Mio Zeilen auswerte, gibt es eine weit geringere Anzahl an möglichen Reihen.
Ich habe daher zuerst die möglichen Kombinationen.
DecompIndex_Buy=
0 0 0 0 0
1 0 0 0 0
2 1 0 0 0
3 2 1 0 0
4 3 2 1 0
5 4 3 2 1
Hierzu erzeuge ich die Zahlenfolge mit der größten Basis (5 4 3 2 1) und erzeuge aus diesem Vektor eine Matrix mit versetzten Vektoren.
Da über die erste Spalte die Zuordnung erfolgt und es keinen Index 0 gibt muss ich einen Hilfsindex erzeugen, der einfach "+ 1" ist (Positions_HelpIndex).
Dann erfolgt die Zuweisung.
Die For-Schleife habe ich gestern nach etwa 3h abgebrochen. 400k von 900k Datensätzen waren bis dahin verarbeitet - hätte also in Summe wahrscheinlich 5h gedauert. Mit dem Code oben schaffe ich es im Schnitt unter 6 sek.
Das ist zumindest mal eine halbwegs akzeptable Zeit. Ich gehe davon aus, dass eine effizienterer Lösungsvorschlag nur durch Erklärung des Gesamtkontexts möglich wäre (-> Status: beantwortet). Deshalb Danke erstmal für Deine Hilfe!
mfG
Bouchaud
_________________
Bouchaud
www.tobin-project.com
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 03.11.2011, 13:55
Titel:
|
 |
Hallo TobinProject,
6 Sekunden statt 5 Stunden? Irgendwie klingt das immer nach einer fehlenden oder falschen Pre-allocation. Dann wächst die Laufzeit allerdings exponentiell, also kann man nach einem Abbruch nach der Hälfte der Daten nicht mit einer doplletlen Laufzeit mit den Gesamt-Daten rechnen.
Das exponentielle Laufzeitverhalten ist sogar ein guter Indikator für Pre-Allocation-Probleme. Wenn man mit 1000, 2000, 4000 Datensätzen testet und sich die Laufzeit endgegen den Erwartungen nicht linear verhält, liegt höchstwharscheinlich ein solches Problem vor.
Gruß, Jan
|
|
|
|
| TobinProject |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 02.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.11.2011, 15:34
Titel:
|
 |
Hallo Jan!
Ja, da gebe ich Dir recht. Ich habe damals sicher nicht das Feld initialisiert.
Ich glaube aber, dass ich bei der Anzahl an Datensätzen Schleifen vermeiden sollte solange es geht, oder?
Bin mit meiner Vorgehensweise semi-zufrieden, da ich egtl hoffte ich könnte die notwendige Matrix in einem Schritt erzeugen.
Für die Decomposition eines Vektors in eine Matrix sind aber ein paar Nebenbedingungen notwendig, die man evtl über einen Operator berücksichtigen kann. Das übersteigt aber leider mein Wissen beim Matrizenrechnen.
mfG
Bouchaud
_________________
Bouchaud
www.tobin-project.com
|
|
|
|
|
|
|
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.
|
|