Nahe Nachbarn bedeuten BerechnungHallo allerseits,
Ich muss den Mittelwert der Matrizen / Komponenten der Nachbarn auf einem mikroelektronischen Wafer berechnen, zum Beispiel auf einer 3x3-Box wie dieser:

Die Referenzkomponente befindet sich in der Mitte einer Box und ist daher von 8 Komponenten umgeben, deren Mittelwert ich für jede Zeile der Datentabelle berechnen möchte (dann berechnen Sie dasselbe für eine 5x5-Box und 15 Nachbarn ...).
Es wird als neue Funktion für maschinelles Lernen verwendet.
Mein Code lautet:
dt = current data table();
<BR />// building the KD table
matrice = (dt:row << getvalues) || (dt:col << getvalues);
table = KDTable(matrice);
for( i=1, i<=nrows(dt),i++,
// get the 3x3 neighbors
neighbors = table << Knearestrows(8,i);
neighbors_number = neighbors[1,1];
// Select the neighbors and get their metrics values and calculate the mean<BR /> dt << select rows (neighbors_number );
mean_selection = Col Mean( If( Selected(), :metric, . ) );
:mean_metric[i] = mean_selection;
dt << clear select
);Hat jemand eine clevere Möglichkeit, diese Berechnung effizienter durchzuführen?
Vielen Dank!
SkriptingBetreff: Nahe Nachbarn bedeuten BerechnungIch bin mir nicht sicher, wie die Effizienz verglichen wird, aber hier ist eine Alternative, die Sie ausprobieren können.
- Die Verwendung von begin / end data update () hilft bei jeder Methode
- Die Verwendung des nächsten Nachbarn ist clever (und vielleicht sogar effizienter), aber beachten Sie, dass immer die 8 nächsten zurückgegeben werden, selbst an den Rändern des Wafers, an denen sich alle Nachbarn auf einer Seite befinden.
- Matrix-Subskription ist möglicherweise effizienter als Col Mean ().
dt = current data table();
metrics = dt[0, "metric"];
rows = dt[0, "row"];
cols = dt[0, "col"];
d = 1; // 1 => 3x3, 2 => 5x5
dt << Begin Data Update();
For Each Row(
neighbors = Loc( :col - d <= cols <= :col + d & :row - d <= rows <= :row + d );
mean all = Mean( metrics[neighbors] );
nn = N Rows( neighbors );
mean without center = (mean all * nn - :metric) / (nn - 1);
:mm = mean without center;
);
dt << End Data Update();
Betreff: Nahe Nachbarn bedeuten BerechnungIch bin mir ziemlich sicher, dass die Größe des Problems bestimmt, ob der Ansatz kdtable () oder loc () besser ist. Ich würde vermuten, dass loc () für eine Matrix von 10x10 oder kleiner und kdtable für 100x100 oder größer gewinnt.
Xans Punkt über die Kanten ist wichtig. Loc () ist möglicherweise der einfachste Weg, um die richtige Antwort zu erhalten.
Betreff: Nahe Nachbarn bedeuten BerechnungVielen Dank, es ist sehr interessant!
Ich benutze manchmal "Datenaktualisierung beginnen", aber ich habe hier nicht daran gedacht: guter Punkt. Damit ist die Loc () - Lösung tatsächlich etwas langsamer als knearestrows (), wenn Sie das Start-Update hinzufügen, das ich für 20.000 Zeilen finde:
altes Skript ohne Update zu beginnen: 116s!
knearestrows () mit begin update: 5s
Loc () mit Beginn der Aktualisierung: 14s
Aber für die Knearestrows musste ich die Art und Weise ändern, wie ich den Mittelwert berechne, da wir mit dem Start / Ende-Update keine ausgewählten Zeilen mehr verwenden können.
Für die Kanten hast du vollkommen recht, ich hatte darüber nachgedacht:
Nachbarn = Tabelle << Knearestrows ({8,1.5}, i);
Um dieses Problem zu vermeiden, verwenden Sie einen begrenzten Radius
Danke noch einmal!
Betreff: Nahe Nachbarn bedeuten BerechnungAndererseits ist mir klar, dass die Lösung der Radiusgrenze nicht perfekt ist, weil wir immer noch ein zusätzliches Element im Array nehmen
Zum Beispiel enthält ein Radius von 1,5 den Wert 2, da dies der Wert ist, der die Suche der Nachbarn stoppt ... Es gibt mir also nicht genau das, was ich will, ich muss ein bisschen mehr suchen!
Betreff: Nahe Nachbarn bedeuten BerechnungSie können genügend Zeilen und Spalten mit fehlenden Werten auffüllen, links, rechts, oben, unten.Abhängig davon, wie weit Sie mit der Erweiterung der Nachbarschaft gehen, haben Sie möglicherweise 8 vollständige Wafer mit fehlendem Wert, die den echten Wafer umgeben.
Es gibt eine andere Möglichkeit, dies zu tun, indem Sie auch die Dummy-Zeilen und Spalten benötigen, die sehr schnell sein werden:
JMP 2D-Matrizen können als lineare 1D-Matrizen indiziert werden.
[1 2,
3 4,
5 6] (3 Reihen, 2 Spalten)
sieht auch so aus
[1]
2,
3,
4,
5,
6] (6 Zeilen, 1 Spalte bei Verwendung eines Index)
Wenn der Wafer NRows x NCols ist, platzieren Sie ihn in der Mitte einer 3NRows x 3NCols-Matrix (ich nenne ihn M3).
Sie können eine Matrix aus 1D-Indizes für den Index M3 erstellen, indem Sie 1 hinzufügen, um sich horizontal zu bewegen, und indem Sie 3NCols hinzufügen, um sich vertikal zu bewegen. Verwenden Sie die Indexmatrix und die Funktion shape (), um eine 3x3-Submatrix aus M3 zu extrahieren.
etwas wie das:
M3 = [. . . . . . . . .,
. . . . . . . . .,
. . . . . . . . .,
. . . 1 2 3 . . .,
. . . 4 5 6 . . .,
. . . 7 8 9 . . .,
. . . . . . . . .,
. . . . . . . . .,
. . . . . . . . .];
indexer2x2 = [1 2 10 11]; // top left 2x2 sub-matrix
For( x = 2, x <= 5, x += 1,
For( y = 2, y <= 5, y += 1,
Write( "\!n ", x, " ", y, " ", Shape( M3[indexer2x2 + x + y * 9], 2 ) );
)
);
2 2 [. .,. 1]
2 3 [. 1 ,. 4]
2 4 [. 4 ,. 7]
2 5 [. 7 ,. .]
3 2 [. ., 1 2]
3 3 [1 2, 4 5]
3 4 [4 5, 7 8]
3 5 [7 8 ,. .]
4 2 [. ., 2 3]
4 3 [2 3, 5 6]
4 4 [5 6, 8 9]
4 5 [8 9 ,. .]
5 2 [. ., 3 .]
5 3 [3., 6.]
5 4 [6., 9.]
5 5 [9.,. .]
Möglicherweise benötigen Sie auch Folgendes: Verwenden von Loc mit einer 2D-Matrix
Sie können indexer3x3 usw. erstellen und den M3 einfach für jede Ebene wiederverwenden. Die for-Schleife x = 3, x <= 5 muss jedes Mal etwas weiter gehen.
Bearbeiten: Die Formfunktion ist möglicherweise nicht erforderlich, wenn Sie nur den Mittelwert der indizierten Elemente ermitteln. Sie zeigt jedoch, was oben passiert ist. mehr: JSL-Matrizen haben ein besonderes Verhalten, wenn der Index kleiner als 1 ist und Sie nicht die Fehlermeldung erhalten, auf die Sie hoffen könnten! Wenn der Indexer eine Null (oder -1 usw.) enthält, erscheint dies sehr seltsam.
Betreff: Nahe Nachbarn bedeuten BerechnungHallo @Franck_R ,
Vielleicht kann Ihnen das auch helfen: Add-In: Geodatenanalyse
Wenn Sie nach der räumlichen Korrelation suchen, ist Morans Ich vielleicht das grundlegendste Konzept.
Ron
Betreff: Nahe Nachbarn bedeuten BerechnungVielen Dank für all das, ich werde mich eingehender damit befassen