|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.04.2013, 01:00
Titel: Indexieren
|
 |
Hallo,
Ich habe ein Datensatz "meineDatenorginal". Dazu noch zusätzlich zwei Vektoren:
"pre" ist ein Vektor, der mir den StartIndexe in meinem Datensatz angibt
"numels" ist ein Vector, der die gleiche Größe, wie "pre" besitzt und die jeweilige Länge des Teildatensatz angibt.
meineDatenOrginal: [1 2 2 2 2 6 4 4 4 8]
pre: [2 7]
numels [4 3]
Jetzt möchte ich die beispielsweise in einem neuen vector, alle Positione nur als vector haben und anschließend alle auf Nan setzen, so zum Beispiel
meineDatenOrginal(Positionen) = NaN;
So sollte dann anschließend in meinem neuen Vector folgendes stehen:
1 NaN NaN NaN NaN 6 NaN NaN NaN 8
Doch wie definiere ich es??
Als zweitens möchte ich gerne die Stellen nun durch den Mittelwert, der vor der Position liegenden und validen Werte, ersetzen?
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 26.04.2013, 10:21
Titel: Re: Indexieren
|
 |
|
 |
|
Hallo Flaschenhals,
Zitat: |
Jetzt möchte ich die beispielsweise in einem neuen vector, alle Positione nur als vector haben und anschließend alle auf Nan setzen, so zum Beispiel
meineDatenOrginal(Positionen) = NaN; |
Ich kann deine Frage nicht im Detail verstehen. Was bedeutet dieser Absatz?
Es wäre hilfreich, wenn Du die vorhandenen Daten in normaler Matlab-Syntax postest, weil wir sie dann per Copy&Paste direkt in die Vorschläge einbauen könnten. So weit ich das verstehe müssten nur die ":" durch "=" ersetzt werden, oder?
Es wäre auch eine gute Idee, wenn du uns zeigst, was du bisher versucht hast und woran es dabei scheiterte.
Ich habe ein Datensatz "meineDatenorginal". Dazu noch zusätzlich zwei Vektoren:
"pre" ist ein Vektor, der mir den StartIndexe in meinem Datensatz angibt
"numels" ist ein Vector, der die gleiche Größe, wie "pre" besitzt und die jeweilige Länge des Teildatensatz angibt.
Zitat: |
meineDatenOrginal: [1 2 2 2 2 6 4 4 4 8]
pre: [2 7]
numels [4 3]
So sollte dann anschließend in meinem neuen Vector folgendes stehen:
1 NaN NaN NaN NaN 6 NaN NaN NaN 8 |
Gruß, Jan
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.04.2013, 23:05
Titel:
|
 |
Vielen Dank für deine Antwort:
Dieser getestete Code gibt folgende Fehlermeldung:
Meine erste gestellte Frage beabsichtigt folgenden Ansatz: Alle Positionen in einem Vector sammeln ()
positionen = [2 3 4 5 7 8 9]
habe es mit folgender Zeile ausprobiert, jedoch ohne Erfolg
Es gibt noch ein Haken und zwar würde ich gerne beispielsweise nur die Werte mit NaN ersetzen, die als "numels" größer als drei sind.
Ich habe
vor der Zeile
verwendet, aber es geht leider nicht.
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 28.04.2013, 22:38
Titel:
|
 |
Ich könnt was ausprobieren, nachdem ich noch ein feedback von euch bekomme.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 01:12
Titel:
|
 |
Hallo Flaschenhals,
Zitat: |
Meine erste gestellte Frage beabsichtigt folgenden Ansatz: Alle Positionen in einem Vector sammeln ()
positionen = [2 3 4 5 7 8 9] |
Ich habe immer noch Schwierigkeiten, Deiner Frage inhaltlich zu folgen. Was genau möchtest Du erreichen?
Mein Code-Vorschlag hatte einen Bug. Besser:
"if numels > 3" kann hier nicht funktionieren. numels ist ein Vektor, da kann eine IF-Bedingung nicht auf einzelne Elemente reagieren.
Gruß, Jan
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 15:57
Titel:
|
 |
Jan du bist wirklich sehr gut. Ich danke dir. FUnktioniert einwandfrei
Mit pre und numels gebe ich ja indirekt die positionen an:
pre(1):pre(1):numels(1) = 2 3 4 5
pre(2):pre(2):numels(2) = 7 8 9
Könnte ich nur die Positionen in ein Vektor schreiben, ohne es manuell zu tun
positionen = [2 3 4 5 7 8 9]
Ich kenne keine andere Möglichkeit außer das mit der manuellen IF Überprüfung für das Filtern der Längen (numels)
Was könntest du dafür empfehlen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 17:01
Titel:
|
 |
Hallo Flaschenhals,
Es freut mich, wenn Dein Problem gelöst ist.
Eine IF-Abfrage funktioniert auch sehr gut, allerdings nur für einzelne Elemente z.B. in einer FOR-Schleife.
Matlab ist spezialisiert auf "vektorisierte" Berechnungen:
Die Getting Started Kapitel der Dokumentation erklären das umfassend. Diese zu lesen ist obligatorisch, wenn man mit so einer mächtigen Sprache wie Matlab sinnvoll arbeiten möchte.
Gruß, Jan
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 18:34
Titel:
|
 |
du bist der king hier jan..
wenn du noch helfen könntest, wie ich die Sache mit den positionen löse, wäre es perfect
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 29.04.2013, 23:09
Titel:
|
 |
Sorry, da ist noch eine Sache und zwar weis ich nicht, wie ich das jetzt mit der pos verknüpfe. Es mir klar dass ich die gewünschte Länge matchen kann, doch wie ordne ich es jetzt die Längen zu den Position zu
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 30.04.2013, 00:18
Titel:
|
 |
Hallo Flaschenhals,
Danke. Ich lösen nur gerne Matlab-Probleme.
Was möchtest du nun genau mit welcher "Position" verknüpfen?
Gruß, Jan
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.04.2013, 16:06
Titel:
|
 |
Nun ja das Filtern der Längen funktioniert mit deinem Code wunderschön, doch wie soll ich bitte die pre's zuordnen.
beim Filtern
[1 2 2 2 2 6 4 4 4 8];
Ich kann ja die numels mit > 3 matchen, doch wie füge ich es in die Funktion an
1 NaN NaN NaN NaN 6 4 4 4 8
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.05.2013, 18:18
Titel:
|
 |
Hilft jemand auch an Feiertagen, hehe
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 01.05.2013, 21:55
Titel:
|
 |
Hallo Flaschenhals,
Ich helfe auch an Feiertagen. Aber ich verstehe die Frage noch nicht.
Was bedeutet denn "die pre's zuordnen"?
Bitte versuche zzusammenhängende Sätze zu schreiben und erkläre, ob die gezeigten Vektoren Beispiel-Inputs oder gewünschte Outputs sind.
Gruß, Jan
|
|
|
Flaschenhals |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.05.2013, 22:21
Titel:
|
 |
Wenn ich jetzt den folgenden Code ausführe bekomme ich das untere Ergebnis
Zitat: |
[1 NaN NaN NaN NaN 6 NaN NaN NaN 8] |
Nun möchte ich aber das Ganze so ausführen, dass die Stellen mit NaN ersetzten werden, welche numels > 3 haben
Dies haben wir herausgefunden, indem wir die folgenden zeilen einfügen können
Doch wie muss ich mein Code ändern, dass ich folgendes bekomme:
Zitat: |
[1 NaN NaN NaN NaN 6 4 4 4 8] |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.05.2013, 09:08
Titel:
|
 |
Hallo Flaschenhals,
Ich glaube, jetzt hab ich es verstanden.
Es sollen ja nur die pre und numels berücksichtigt werden, bei denen numnels>3 gilt. Also entfernt man alle pre und numels, bei denen das nicht gilt.
Den unteren Abschnitt habe ich etwas umgestellt, das ist aber keine inhaltliche Veränderung. Die JIT-Acceleration arbeitet effizienter, wenn die Variablen nicht ihren Typ ändern. Deshalb habe ich nun "indexD" für DOUBLE eingeführt, während der LOGICAL Vektor "index" heißt. Das spart bestimmt über 10 Microsekunden :-)
Gruß, Jan
|
|
|
|
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.
|
|