|
Matlab_Newbiee |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.01.2017, 01:49
Titel: Zeilen extrahieren
|
|
Hallo,
ich habe eine ähnliche Frage. Ich versuche aus einer Riesenmatrix AB_red (4994x 3) nur diese Zeilen zu extrahieren, die in der dritten Spalte den Wert 548.20 haben. Die neue kleinere Matrix soll also wieder 3 Spalten haben und nur die Zeilen, die den Wert 548.20 enthalten. Profil_31 = AB_red(AB_red(:,3)==548.20 ,1:3) funktioniert bei der großen Matrix AB_red nicht, und wird eine leere Matrix ausgegeben. Bei der Matrix AB_red_Auszug funktioniert allerdings der gleiche Code/Befehl. Ich kann mir nicht erklären wieso bei der Matrix AB_red das nicht geht.
Als Ausgabe bekomme ich:
size_AB_red =
4994 3
Profil_31 =
Empty matrix: 0-by-3
size_Profil_31_Auszug =
74 3
>>
Für jede Hilfe bin ich dankbar!
Gruß
Matlab_Newbiee
[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.448
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 15.01.2017, 04:38
Titel:
|
|
Hallo,
ohne die Daten zu haben ist das schwer zu sagen.
Vermutung: die Daten sind nicht genau 548.20, sondern minimal abweichend. Ich würde statt == 548.20 mal abs(... - 548.20) < 1e-9
Grüße,
Harald
|
|
|
Gesplittet: 15.01.2017, 14:12 Uhr von Jan S Von Beitrag Vektror zerlegen/ in Teilvektoren aufspalten aus dem Forum Programmierung |
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 15.01.2017, 14:48
Titel: Re: Zeilen extrahieren
|
|
|
|
|
Hallo Matlab_Newbiee,
Bitte hänge keine neuen Fragen an bestehende Threads an und verwende die Code-Umgebung - Danke!
Zitat: |
Profil_31 = AB_red(AB_red(:,3)==548.20 ,1:3) funktioniert bei der großen Matrix AB_red nicht, und wird eine leere Matrix ausgegeben. |
Überlege mal: Matlab ist eine deterministische Programmiersprache und wirklich gut getestet. Die Idee, dass die gezeigte Zeile "nicht funktioniert" ist deshalb ziemlich originell oder sogar abwegig. Weitaus naheliegender wäre es, Matlab zu glauben und zu sehen, dass die 3. Spalte keine Werte enthält, die 548.20 sind.
Du erwartest aber, dass solche Werte auftauchen. Zu klären wäre also eigentlich, warum Du das erwartest, denn hier liegt da Problem.
Einerseits zeigt Matlab Komma-TZahlen nur mit einer begrenzten Anzahl von Stellen an. 548.199999999999999 würde also je nach
format
Einstellung auch als 548.2 angezeigt werden. Andererseits werden in Matlab (wie in allen anderen Sprachen, die mit DOUBLEs rechnen auch) Fließkommazahlen nach dem IEEE754-Standard binär gespeichert, wofür nur eine begrenzte Anzahl von Bits zur Verfügung steht. Die meisten (mathematisch korrekt: "fast alle") Dezimal-Zahlen haben aber keine exakte Darstellung im Binär-Format mit begrenzter Genauigkeit. Daher stammt der Ebvergreen in der FAQ:
Vergleiche zwischen Fließkommazahlen benötigen deshalb immer eine Toleranz (siehe Harald's Antwort). Ob die nun relativ oder absolut ist und wie hoch genau, hängt leider immer von der Aufgaben-Stellung ab. Bei
liegt man mit der erwarteten Antwort schon ganz schön daneben.
Quiz: Was ist das Ergebnis von
?
Viele Grüße, Jan
|
|
|
|
|
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 - 2024
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.
|
|