最も近い値を検索する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、みんな、
列内の何かに最も近い値を検索する必要があります。これを行うための関数(私は見つけることができません)はありますか、それともそれを行うために独自のルーチンを作成する必要がありますか?
ありがとう、ナタリー
Re:最も近い値を検索するご協力ありがとうございました!できます。
Re:最も近い値を検索する使用する
col = Column(dtFile1、 "X_location");
JMPオブジェクト(dtFile1のデータテーブルなど)は通常、理解できないメッセージ(<< column(...)など)を黙って無視します。
Re:最も近い値を検索する応答が遅いことをお詫びします。私は何か他のものに巻き込まれた。最初に2番目の解決策を試しましたが、まったく機能しません。列の最小値を見つけることすらできません...どうしたの?私の列が数値列ではなく文字列列であることに気付いたので、それを変換しましたが、それは何の役にも立たなかったようです。
桁(( dtFile1 、 「X_location」 )。 <<データ・タイプ(( 「数値」 )。 ;
col = dtFile1 <<桁(( 「X_location」 )。 ;
行= Loc Min ((( col << getValues )))) ;
Re:最も近い値を検索するKDTableを使用するもう1つの方法。
dt = Open( "$ sample_data / big class.jmp");
// kdtableの入力行列を作成します:[95 59、123 61、74 55、..。
データ=(dt:weight << getasmatrix)|| (dt:height << getasmatrix);
//ルックアップテーブルを作成します
ルックアップ=KDTable(データ);
//ルックアップの例を実行します:体重100ポンド、身長60の最も近い10人を見つけます
// 5の距離内のインチ(5は重量およびポンドと同じ「単位」にあります...正規化しますか?)
{rowNumbers、distances} = lookup << knearestrows({10、5}、[100 60]);
//結果を表示します
For(irow = 1、irow <= N Cols(rowNumbers)、irow ++、
rowIndex = rowNumbers [irow];
Write(dt:name [rowIndex]、 "w ="、dt:weight [rowIndex]、 "h ="、dt:height [rowIndex]、 "d ="、distances [irow]、 "\!n");
);
/ *:
アルフレッドw=99 h = 64 d = 4.12310562561766
CHRIS w = 99 h = 64 d = 4.12310562561766
マークw=104 h = 62 d = 4.47213595499958
KATIE w = 95 h = 59 d = 5.09901951359278
したがって、d = 4.123はsqrt((100-99)^ 2 +(60-64)^ 2)です。Katieが発見されるまでに、半径5を超えたため、要求された10件の結果は半径によって制限されていました。
KDTableはK次元データで機能します。 K = 1(たとえば体重だけ)またはK = 3(年齢も含む)だけが必要な場合があります。スケーリング/正規化の問題は、身長や体重よりもはるかに狭い範囲を持つこのデータの年齢とともにより明白になります。13歳から14歳までの距離は、75ポンドから80ポンドまでの距離よりも多いですか、それとも少ないですか。
編集:重量だけで、それはさらに簡単に見えます:
dt = Open( "$ sample_data / big class.jmp");
//ルックアップテーブルを作成します
lookup = KDTable(dt:weight << getasmatrix);
//ルックアップの例を実行します:体重100ポンドに最も近い10人を見つけます
{rowNumbers、distances} = lookup << knearestrows({10、5}、[100]);
//結果を表示します
For(irow = 1、irow <= N Cols(rowNumbers)、irow ++、
rowIndex = rowNumbers [irow];
Write(dt:name [rowIndex]、 "w ="、dt:weight [rowIndex]、 "d ="、distances [irow]、 "\!n");
);
/ *:
アルフレッドw=99 d = 1
CHRIS w = 99 d = 1
ジョンw=98 d = 2
マークw=104 d = 4
KATIE w = 95 d = 5
JOE w = 105 d = 5
マイケルw=95 d = 5
粘土w=105 d = 5
ダニーw=106 d = 6
Re:最も近い値を検索する以下は、最も近い値の行を取得する2つの方法です。 1つ目は行番号の行列を返すため、タイが可能になります。 LocMin()関数を使用する2番目のアプローチでは、一意の最も近い値が1つあると想定されています。最初のインスタンスの行番号のみを返し、タイを無視します。
名前はデフォルトでここにあります(( 1 )。 ;
dt =開ける(( "$ SAMPLE_DATA \ Big Class.jmp" )。 ;
col =桁(( "重さ" )。 ;
//値に最も近いすべての行を選択します
価値= 99.5 ;
d =腹筋((( col <<値を取得する)。 -価値)。 ;
行= Loc (( d ==最小(( d )) ;
見せる((行)。 ;
dt <<行を選択((行)。 ;
//値に最も近い最初の行を選択します
価値= 112 ;
行= Loc Min ((腹筋((( col <<値を取得する)。 -価値)) ;
見せる((行)。 ;
dt <<行を選択((行)。 ;
Re:最も近い値を検索するまたは、行列ベクトルを作成できます
rowmat = index(1、N Rows(dt));
次に、同じランク行列を使用して並べ替えます
rowmatsorted = rowmat;
次に、ソートされた値マトリックスと同じ順序で行番号が含まれるため、値マトリックスから最も近い値の位置を取得すると、rowmatsortedマトリックス内の同じ位置に行番号が含まれます。
Re:最も近い値を検索するジムありがとう、これは素晴らしいです。
間違いなく使えます。ただし、次の列で対応する値を取得できるように、行番号を知る必要があります。
関数を使用して最も近い値を見つけたら、元のデータでその値を検索して行番号を見つける必要がありますか?
Re:最も近い値を検索するナタリー、
これは、ターゲット値に最も近い値を返す、私が作成した単純な関数です。
名前はデフォルトでここにあります(( 1 )。 ;
dt =開いた(( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" )。 ;
findClosest =関数(( {{価値、 col } 、
{{ a 、 R 、 aa 、すぐ真上に、 justBelow 、価値、 col } 、
a =桁(( col )。 <<値を取得する;
R =ランク(( a )。 ;
aa =ソート済み= a [ R ] ;
b = 108 ;
すぐ真上に= aa [ Loc (( aa >>価値)[ 1 ]] ;
justBelow = aa [ Loc (( aa <価値)[ N行(( Loc (( aa < b )。 )]] ;
もしも((すぐ真上に-価値<価値- justBelow 、
すぐ真上に、
)。 ;
)。 ;
見せる((最小= findClosest (( 108 、 「NPN1」 )) ;