Wenn im 3.Tensor, also den z- Werten, eine Null steht, sollte dieser Punkt mit samt seinen x und y Werten aus der Matrix verschwinden. Also wenn data2(i,j,3) = 0 dann soll data2(i,j,2) und data2(i,j,1) auch gelöscht werden.
Wenn Du nun x(1,2,:) löschst, hat der verbleibende Rest unterschiedliche Längen für die Zeilen und Spalten. Damit ist es kein Array mehr. Als Vektor kann man das auf jeden Fall noch darstellen, aber möchtest Du das?
Gruß, Jan
Kalle1963
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.03.2013, 01:10
Titel:
Hallo Jan, danke für die Antwort noch um diese Uhrzeit.
Ja, ich denk schon das ich das will.
Bei den x und y Werten, dürfen Nullen vorkommen, aber sobald eine Null bei den z Werten ist, sollte diese Position gelöscht werden, die x und y Werte an dieser Stelle interessieren dann nicht mehr und sollen eben nicht mehr dargestellt werden.
Ich hoff du kannst verstehen worauf ich hinaus will
Leider hilfr genau dies nicht: Während man problemlos einen Sub-Vektor auf 0 setzen kann, funktioniert das Löschen nicht.
Ein [20 x 30 x 3] Array hat 60*3 Elemente. Wenn ein Element in der 3. Komponente ist 0, sollen 3 Elemente davon gelöscht werden. Danach hat also 59*3 Elemente, und das kann man nicht mehr in ein [M x N x 3] Array packen, da 59 eine Primzahl ist. Insbesondere weder M=20 noch N=30 möglich.
Machbar ist aber eine [59 x 3] Matrix als Ergebnis. Aber hier muss der OP erstmal erklären, ob das so gewollt ist.
Wenn er es anders gemeint hat, hast du ihn ja bereits richtigerweise aufgeklärt und in dem Fall sollte meine Antwort ein Hinweis sein, wie man es machen könnte.
Beste Grüße,
Seban
Kalle1963
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.03.2013, 13:45
Titel:
Hallo Jan, Hallo Seban,
erstmal großes Dankeschön, dass ihr euch meines Problems widmet.
Ich habe vllt vergessen zu erwähnen, dass das 3D Array aus Messwerten besteht, dass ich nun auswerten darf.
Das Hauptproblem dabei ist, das er mir die Fläche sobald ich sie mit mesh oder surf plotte zwar anzeigt, sie aber mit dem Ursprung zusammenhängt, weil einige der z-Werte als Nullen abgespeichert sind.
Setze ich nun alle Nullen in der Matrix gleich NaN, so sind zwar die "bösen" Nullen bei z (:,:,3) verschwunden, jedoch auch die Nullen bei x (:,:,1) und y (:,:,2) und somit wird der entstehende Graph (Fläche) wieder verfäscht. Die Werte müssen nicht gelöscht werden, sie dürfen nur nicht angezeigt werden.
Ich hab es nun nach deiner Idee gemacht, Seban. Hatte aber leider noch keinen Erfolg damit.
falls noch jemand eine Idee hat, raus damit
Das Hauptproblem dabei ist, das er mir die Fläche sobald ich sie mit mesh oder surf plotte zwar anzeigt, sie aber mit dem Ursprung zusammenhängt, weil einige der z-Werte als Nullen abgespeichert sind.
Setze ich nun alle Nullen in der Matrix gleich NaN, so sind zwar die "bösen" Nullen bei z (:,:,3) verschwunden, jedoch auch die Nullen bei x (:,:,1) und y (:,:,2) und somit wird der entstehende Graph (Fläche) wieder verfäscht. Die Werte müssen nicht gelöscht werden, sie dürfen nur nicht angezeigt werden.
Dann sollte es doch eigentlich reichen die z-Werte (die =0 sind) auf NaN zu setzen. Die zugehörigen x & y braucht man nicht ändern. Der Punkt (x, y, z) wird nicht dargestellt, wenn ein Wert NaN ist. Oder vertue ich mich jetzt?
Bitte schreibe nicht nur "Hatte aber leider noch keinen Erfolg damit", sondern beschreibe, was genau passiert ist. Ansonsten können wir kaum Verbesserungsvorschläge machen.
Nun ist also geklärt, das die Elemente nich gelöscht, sondern auf NaN gesetzt werden sollen. Das sollte eigentlich so möglich sein:
Code:
isZero = any(t == 0, 3);
s = size(t);
t = reshape(t, [], s(3));
t(isZero, :) = NaN;
t = reshape(t, s);
@ Seban
du hast es richtig verstanden und damit recht, dass nur die z Werte auf NaN gesetzt werden müssen
@ Jan
Ok, sorry das ich das wohl nicht genau beschrieben hatte. Das Problem bis jetzt ist, dass ich entweder alle Nullen in dem Array auf NaN setzen kann, oder gar keine.
Sobald alle Nullen auf NaN gesetzt werden, zeichnet er mir die Werte für x = 0 und y = 0 natürlich auch nicht, aber das wäre schon notwendig. Das Ziel wäre es nur die Nullen im z-Bereich (:,:,3) auf NaN zu setzen.
Auch mit diesem Ansatz werden die Nullen des _gesamten_ Arrays auf NaN gesetzt.
Code:
isZero = any(t == 0, 3);
s = size(t);
t = reshape(t, [], s(3));
t(isZero, :) = NaN;
t = reshape(t, s);
Hallo Seban, das wars. Diese Lösung funktioniert genauso wie ich es mir gewünscht hatte. Vielen Dank, du warst mir eine sehr große Hilfe.
Auch vielen Dank an Jan.
grüssle Kalle
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.