<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe zwei jmp-Datentabellen, die ich in der Lage sein muss, sie gegeneinander zu bewerten, ohne sie miteinander zu verbinden (sie sind beide große Tabellen) in JSL.
Die erste ist eine Tabelle, die aus verschiedenen Elementen besteht, denen X- und Y-Koordinaten zugewiesen sind.
Die zweite Tabelle ist eine Hauptreferenztabelle, die die XY-Koordinaten nur für die linke untere Ecke und die obere rechte Ecke der Begrenzungsbox / Partition enthält, in der sich die Punkte befinden können (innerhalb desselben Koordinatensystems). Ich muss in der Lage sein, die Referenztabelle mithilfe der generierten Tabelle mit XY-Koordinaten zu durchsuchen, um zu bestimmen, in welchem Begrenzungsrahmen jedes Element innerhalb von liegt.
Ich bin in der Lage, einen kartesischen Join der beiden Datentabellen auszuführen und mit einer Stilspalte (xmin_ref
Gibt es eine Funktion / Methode, die es mir ermöglicht, das zu tun, was ich brauche, ohne einen kartesischen Join durchzuführen?
Vielen Dank!
Hier ist ein brutaler Versuch. Die Leistung war für 1000 xy-Zeilen sofort, 17 Sekunden für 100.000 xy-Zeilen und 159 Sekunden für 1 Million xy-Zeilen. Könnte mit der Funktion "In Polygon" beschleunigt werden.
// Kleine Tabelle mit XY-Werten
Xydt = Neue Tabelle ( "xy-daten" . Zeilen hinzufügen ( 10 ) .
Neue Spalte ( "x" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0.206704897573218 . 0,188453091308474 . 0,402824054239318 .
0,946105436887592 . 0.209207338048145 . 0,783533588517457 .
0,15626378194429 . 0.293116413988173 . 0,0382238682359457 .
0,0646856701932847 ] ) ) .
Neue Spalte ( "y" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0,258698139106855 . 0,395224047359079 . 0,0813549624290317 .
0,158546321559697 . 0,874619059031829 . 0,787837725598365 .
0,173847715603188 . 0,736063659423962 . 0,782933217706159 .
0,28023144742474 ] ) ) .
Neue Spalte ( "Box" . Charakter . Nominal )
) ;
// Tabelle der linken und oberen rechten Koordinaten
refdt = Neue Tabelle ( "Box-Referenz" . Zeilen hinzufügen ( 26 ) .
Neue Spalte ( "xll" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0 . 0 . 0 . 0 . 0 . 0,2 . 0,2 . 0,2 . 0,2 . 0,2 . 0,4 . 0,4 . 0,4 . 0,4 . 0,4 . 0,4 .
0,6 . 0,6 . 0,6 . 0,8 . 0,8 . 0,8 . 0,9 . 0,9 . 0,9 . 0,9 ] ) ) .
Neue Spalte ( "yll" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0 . 0,2 . 0,4 . 0,6 . 0,8 . 0,1 . 0,3 . 0,5 . 0,7 . 0,9 . 0,1 . 0,3 . 0,5 . 0,7 . 0,8 .
0,9 . 0,2 . 0,4 . 0,6 . 0,2 . 0,4 . 0,6 . 0,3 . 0,5 . 0,7 . 0,9 ] ) ) .
Neue Spalte ( "xur" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0,2 . 0,2 . 0,2 . 0,2 . 0,2 . 0,4 . 0,4 . 0,4 . 0,4 . 0,4 . 0,6 . 0,6 . 0,6 . 0,6 .
0,6 . 0,6 . 0,8 . 0,8 . 0,8 . 1 . 1 . 1 . 1 . 1 . 1 . 1 ] ) ) .
Neue Spalte ( "yur" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen (
[ 0,2 . 0,4 . 0,6 . 0,8 . 1 . 0,3 . 0,5 . 0,7 . 0,9 . 1 . 0,2 . 0,4 . 0,6 . 0,8 . 0,9 .
1 . 0,4 . 0,6 . 0,8 . 0,4 . 0,6 . 0,8 . 0,5 . 0,7 . 0,9 . 1 ] ) ) .
Neue Spalte ( "Box" . Charakter . Nominal .
Werte setzen (
{ "EIN" . "B" . "C" . "D" . "E" . "F" . "G" . "H" . "ICH" . "J" . "K" . "L" . "M" . "N" .
"O" . "P" . "Q" . "R" . "S" . "T" . "U" . "V" . "W" . "X" . "Y" . "Z" } ) )
) ;
start_dt = heute () ;
zum ( ich = 1 . ich <= nrows ( Xydt ) . ich ++
xval = Xydt : x [ ich ] ;
yval = Xydt : y [ ich ] ;
ref_list = refdt << rudern wo ( : xll <= xval & : yll <= yval &
xval < : xur & yval < : yur ) ;
// Prüfen Sie, ob wir eine Übereinstimmung gefunden haben
ob ( nrows ( ref_list ) > 0 .
match_row = ref_list [ 1 ] ; // Nimm den ersten. sollte nur eine sein!
Xydt : Box [ ich ] = refdt : Box [ match_row ] ;
) ;
) ;
end_dt = heute () ;
vergangen = end_dt - start_dt ;
drucken ( vergangen ) ;
Ich habe ein Skript angehängt, das in einer Nachschlagetabelle nachschlägt und auf eine Haupttabelle reagiert.
Entschuldigung für den Anhang, anstatt ihn als Text zu haben ... aber aus irgendeinem Grund lässt mich dieses Fenster nicht einfügen.
Nach einem Neustart konnte ich schneiden und einfügen 
Namensvorgabe bis hier ( 1 ) ;
dt = Öffnen ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
Sieh nach oben = dt << Zusammenfassung (
Gruppe( : lot_id . : Wafer) .
Bedeuten ( : NPN1) .
Median( : NPN1) .
Freq ( "Keiner" ) .
Gewicht( "Keiner" ) .
Statistikspaltennamenformat ( "Spaltenstat" ) .
Verbindung zur ursprünglichen Datentabelle ( 0 )
) ;
dt << Neue Spalte ( "Bedeuten" ) ;
dt << Neue Spalte ( "Median" ) ;
Zum ( ich = 1 . ich <= N Reihen (dt) . ich ++
LookupRow = (Sieh nach oben << rudern wo ( Sieh nach oben : lot_id == dt : lot_id
& Sieh nach oben : Wafer == dt : Wafer )) [ 1 ] ;
dt : Bedeuten = Sieh nach oben : NPN1-Mittelwert [LookupRow] ;
dt : Median = Sieh nach oben : NPN1 Median [LookupRow] ;
) ;