.. highlightlang:: us .. _reduce3d: reduce3d ======== .. index:: reduce3d .. us.tag reduce3d GERMAN interpol-2d New5102 :ref:`reduce3d` entfernt Datenpunkte aus x/y/z-Datensätzen. .. function:: idx = reduce3d(rvX, rvY, rvZ) idx = reduce3d(rvX, rvY, rvZ, nClasses, nType) .. us.return **Returnwert** *idx* ist ein Vektor mit ganzen Zahlen der Länge 1 bis *nClasses* mal *nClasses*. Im Fehlerfall ist idx[1] gleich 0. .. us.params **Parameter** .. uparam:: rvX *rvX* ist ein Vektor mit X-Koordinaten. .. uparam:: rvY *rvY* ist ein Vektor mit Y-Koordinaten. .. uparam:: rvZ *rvZ* ist ein Vektor mit Z-Koordinaten. .. uparam:: nClasses *nClasses* ist ein Wert zwischen 2 und 1000 (Default ist 100). Bei einem negativen Wert werden die Klassengrenzen um eine halbe Klassenbreite verschoben. .. uparam:: nType *nType* ist einer der folgenden Werte (Default ist 5): .. list-table:: :header-rows: 1 * - Wert - Bedeutung * - 0 oder "first" - Der erste Punkt jeder Klasse wird verwendet. * - 1 oder "last" - Der letzte Punkt jeder Klasse wird verwendet. * - 2 oder "zmin" - Der Punkt mit der kleinsten z-Koordinate jeder Klasse wird verwendet. * - 3 oder "zmax" - Der Punkt mit der größten z-Koordinate jeder Klasse wird verwendet. * - 4 oder "mean" - Es wird der Punkt verwendet der dem Mittelwert der z-Koordinate innerhalb der Klasse am nächsten kommt. * - 5 oder "median" - Es wird der Punkt verwendet der dem mittleren Wert der z-Koordinate innerhalb der Klasse am nächsten kommt. .. us.comment **Kommentar** Die Funktion legt ein Netz der Größe *nClasses* * *nClasses* über die Daten. Fallen mehrere Punkte in ein Rechteck des Netzes, wird nur jeweils ein Punkt aus dieser Gruppe verwendet. Bei einem 100 mal 100 Netz ergeben sich dann höchstens 10000 Punkte. Liegen alle Punkte auf einer Geraden ergeben sich 100 Punkte. NaNs (0/0), Infs (1/0), Missing Values (1e10) sowie Werte im Bereich kleiner -1e10 oder größer 1e10 werden vorab entfernt. .. us.example **Beispiel** :: def XYZFilterCallback(x, y, z) { return reduce3d(x,y,z, 40, "median"); } def test_xyz() { x = rand(100000, 1)*15-7.5; y = rand(100000, 1)*15-7.5; r=sqrt(x.*x + y.*y); z=sin(r)./r; plotxyz(x,y,z); } .. us.history **History** .. list-table:: :header-rows: 1 * - Version - Beschreibung * - 5.10.2 - Neu. .. seealso:: :ref:`uberblick-xyz-datensatze`, :ref:`XYZCreate` :sub:`id-1623504`