0

0 ~ 9 の値を持つ m*n 行列があります。基本的に、私がやりたいことは、値が 0 であるすべてのセルを見つけ、0 ではない k 個の最近傍を見つけることです。

私のコードは現在、次の行に沿っています。

  • ゼロを含むすべてのセルを見つけ、x と y の位置を保持する a*2 行列を作成します

  • 0 のないすべてのセルに対して同じことを行います

  • 指定された各ゼロ座標を循環するループを作成し、ゼロ以外のすべてのセルまでの距離を測定し、新しい行列の行 1 に記録します (行 2 と 3 はそれぞれ x 座標と y 座標です)。

  • sortrows() を使用してこの行列を昇順で取得し、最初の k 個の値 (つまり、最も近い k 個の座標) を抽出します。

  • 繰り返す

私が望んでいたのは、内部ループなしで k 個の最も近いゼロ以外のセルをすばやく見つけて、各 0 セルに対して繰り返すことでした。アドバイスをいただければ幸いです。どうもありがとうございました。

4

1 に答える 1

0

たとえば、現在行っているように、ゼロ以外のすべてのエントリを見つけてから、対応する頂点を決定することで、この問題を解決します。を使用dsearchnして、k 個の最も近い点を見つけることができます。これを繰り返し実行したい場合は、delaunayTriangulationオブジェクトを作成すると効果的です。

于 2013-05-22T10:50:04.700 に答える