行列20×10のA行列があります。
A=[ 4.234 3.332 ....
........
ここから、数字 3.234に最も近い数字はA(3,4)にあるというように、インデックス(3,4)を取得したいです。
knnsearchでできるようで、
IDX = knnsearch(A, 3.234)
Y must be a matrix with 10 columns. といったようにエラーが出てしまいます。どのようにすればよいでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Idx = knnsearch(X,Y)
は、Y
内の各クエリ点に対する最近傍をX
内で探索し、列ベクトルIdx
にインデックスを返します。Idx
の行数はY
と同じです。matlab
1load hospital; 2X = [hospital.Age hospital.Weight]; 3Y = [20 162; 30 169; 40 168; 50 170; 60 171]; % New patients 4Idx = knnsearch(X,Y);
X — 入力データ
数値行列
入力データ。数値行列を指定します。X
の行は観測値に、列は変数に対応します。Y — クエリ点
数値行列
クエリ点。数値行列を指定します。Y
の行は観測値に、列は変数に対応します。Y
の列数はX
と同じでなければなりません。
knnsearch
の入力データは、列は変数に対応するようです。
引用した例では、年齢と体重の2つの変数があるようです。
今回の質問内容は、変数は1つのように思います。
knnsearch
を使うのであれば、A
を1列に変換してからになりそうですかね。
引数の2つ目(Y
)も数値行列で指定するみたいですね。
(knnsearch
は変数1つでもOKなのでしょうか・・)
knnsearch
を使わない形になりますが、今回の質問内容に近いページがMATLAB Answersにありました。
多次元の行列の最小値や最大値、またその位置を求めるにはどうすればよいですか?
例えば、多次元行列 "z" 全域から最小値を求めるためには、以下のように、コロン演算子を使って、入力する多次元配列をベクトル化します。
[C, I] = min(z(:))
これにより、min や max 関数で最小値、最大値を求めることができます。
この結果、インデックス I も 1 列データの何番目、となりますが、ind2sub 関数を使用して、元の (2次元の) z 行列のどの位置かを求めることができます。>> z = rand(10) z = Columns 1 through 7 0.4173 0.7803 0.2348 0.5470 0.9294 0.6443 0.2077 0.0497 0.3897 0.3532 0.2963 0.7757 0.3786 0.3012 0.9027 0.2417 0.8212 0.7447 0.4868 0.8116 0.4709 0.9448 0.4039 0.0154 0.1890 0.4359 0.5328 0.2305 0.4909 0.0965 0.0430 0.6868 0.4468 0.3507 0.8443 0.4893 0.1320 0.1690 0.1835 0.3063 0.9390 0.1948 0.3377 0.9421 0.6491 0.3685 0.5085 0.8759 0.2259 0.9001 0.9561 0.7317 0.6256 0.5108 0.5502 0.1707 0.3692 0.5752 0.6477 0.7802 0.8176 0.6225 0.2277 0.1112 0.0598 0.4509 0.0811 0.7948 0.5870 0.4357 Columns 8 through 10 0.3111 0.5949 0.0855 0.9234 0.2622 0.2625 0.4302 0.6028 0.8010 0.1848 0.7112 0.0292 0.9049 0.2217 0.9289 0.9797 0.1174 0.7303 0.4389 0.2967 0.4886 0.1111 0.3188 0.5785 0.2581 0.4242 0.2373 0.4087 0.5079 0.4588 >> [C, I] = min(z(:)) C = 0.0154 I = 24 >> [ii, jj] = ind2sub(size(z), I) ii = 4 jj = 3
4 行 3 列の 0.0154 が最小となります。
単純に最小値を求めるのではなく、3.234
との差の絶対値が最小のものを求める形に変えてあげればできそうかな?と思いました。
投稿2022/01/23 02:16
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/23 08:58