Wertevergleich: Zeile rausschreiben funktioniert nicht
palul
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.07.2015, 11:36
Titel: Wertevergleich: Zeile rausschreiben funktioniert nicht
Hallo
Die Werte von meinem vektor ee(:) sollen mit der Spalte h2r(k,:,8) verglichen werden. Wenn der Wert von ee(:) in h2r(k,:,8) gefunden wird, soll die Zeile von h2r in neu(k,df,2) gespeichert werden.
Hier mal mein Code:
Code:
for k=1:length(files);
for df=1:5;
for d=b(k)+1:bb(k);
if ee(df)==h2r(k,d,8)
neu(k,df,2)=d;
end
es ist immer besser ein lauffähiges beispiel zu generieren. das kann man dann leichter nachvollziehen.
was ist wenn die werte nicht vorkommen? was soll dann passieren?
was meinst du mit flaschen werten? alle falsch? oder einige die du nicht erwartet hast? das musst du genauer ausführen wenn das beispiel nicht lauffähig ist.
man kann das auch ohne schleife einfach mit
intersect
machen.
grüße
_________________
Wenn Werte nicht vorkommen, dann soll Zeilennummer=Null rausgeschrieben werden.
falsche Zahl ist zum Beispiel einfach eine Null.
das siht für mich nicht einheitlich aus. setz den debugger an die stelle wo die 0 geschrieben wird und guck dir an was da passiert. wenn der platz lehr bleibt wird automatisch ne 0 eingefügt bei der vergrößerung des arrays. du solltest das eh vorher schonmal anlegen um rechenzeit zu spaaren. das was in deinem beispiel schnell geht geht bei großen datenmengen dann auch mal ganz schnell sehr langsam.
dein k fängt zb bei 500 an.. also hast du 499 lehre matritzen die unnötig speicher fressen. und wie ich bereits sagte kannst du auch einfach
intersect
benutzen
_________________
for k=1:2; %Alle Zeillennummern wo dehnung gleich ist export RÜCKWEG
for df=1:2;
for d=1:4; % d=b(k)+1:bb(k); if ee(df)==h2r(k,d,8)
neu(k,df,2)=d;
else
neu(k,df,2)=0;
end
%ERWARTUNG:
%neu(1,1,2)=3
%neu(1,2,2)=4 <- wird gefunden, andere nicht
%neu(2,2,2)=1
%Rest von neu(k,:,2)=0
for k=1:2; %Alle Zeillennummern wo dehnung gleich ist export RÜCKWEG
for df=1:2;
for d=1:4; % d=b(k)+1:bb(k); if ee(df)==h2r(k,d,8)
neu(k,df,2)=d;
% else % neu(k,df,2)=0; end
%ERWARTUNG:
%neu(1,1,2)=3
%neu(1,2,2)=4 <- wird gefunden, andere nicht
%neu(2,2,2)=1
%Rest von neu(k,:,2)=0
wie kommst du zu der Annahme ? intersect hat mehr als einen rückgabe parameter.
wenn dir etwas komisch vorkommt benutze den debugger wie ich bereits sagte.
_________________
Vielen Dank wieder für Eure Antworten, aber ich komme leider immer noch nicht weiter.
intersect scheint mit meinen Variablen nicht zu funktionieren, da sie beide nicht als Matrix vorliegen.
intersect(h2r(k,:,8),ee,'rows')
Error using intersect>intersectR2012a (line 561)
Inputs A and B must be matrices with the same number of columns in the 'rows' case.
Error in intersect (line 135)
[varargout{1:nlhs}] = intersectR2012a(varargin{1:2},logical(flaginds(1:3)));
Wenn ich so einen Breakpoint setze passiert auch irgendwie nichts (das clear all ist jetzt weg). Ich habe leider keine großartige Ahnung von Matlab :-/
palul
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.07.2015, 15:27
Titel:
Ich habe noch mal geschaut warum
find(h2r(1,:,8)== ee(88)) : Empty matrix: 1-by-0
liefert, was ja eigentlich falsch ist, siehe den anderen Post.
Ich tendiere daher jetzt auf ein Genauigkeitsproblem zu sein. Also meine if Schleife scheitert womöglich, weil es vielleicht nicht ganz genau der gleiche Wert ist.
Die h2r(1,:,8) Werte sind nämlich gerundet worden. Auf die selbe Nachkommastelle wie ee(88) zwar, aber vielleicht ist das dann der Fehler.
Habt Ihr da noch einen Tipp? Entweder die gerundeten Werte von h2r(1,:,8) nochmal irgendwie neu generieren, oder die if schleife irgendwie mit einer Toleranz versehen.
palul
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.07.2015, 15:37
Titel:
So ich habe es jetzt endlich!
Es war tatsächlich das Genauigkeitsproblem
mit ersetzen der if schleifenzeile durch:
if abs(h2r(k,d,8) - er(df)) < 0.0005
funktioniert es jetzt endlich
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
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.