需要のないページスマートフォン用の表示で見る需要のないページプログラミングや趣味や。この広告は、90日以上更新していないブログに表示しています。クラスタリング能書きOpenCVについて以前調べているとき、内部関数partitionの存在を知った。簡易なクラスタリングを行う汎用関数のようだ。documentation要素の集合を同値クラス(同値類)に分割します.個人的には、こいつはとんでもなく使い勝手が良い関数だと思う。残念なことに、この関数はユーザに開放されていないのだ。*1そいつを、自力で焼き直して解決してみた話。Use大抵の読者にとって、『どのように実現するか』は関心の外にあるだろう。差が1以内の要素を同一グループにする連続する要素を同一のクラスタに振り分ける。2]偶奇をグループ分けする偶数/奇数にそれぞれ0/1のラベルを与える。結果に応じて分割する意外と煩雑な処理が必要なので、関数gen_groupを用意しておいた。本家のpartitionに倣って、UnionFind木を利用する。structure)は、データの集合を素集合(互いにオーバーラップしない集合)に分割して保持するデータ構造。自力で組むのも良い勉強になるだろうが...ここではパフォーマンスを優先して既存のコードを利用する。Python今回書いたpartition.pyは次のとおり。)この中で強いて解説するなら_renumber関数だろう。この関数は野放図に振られたクラスタIDを、0からの連番に変更する。3]日頃行っているパズルのようなコーディングも、案外役に立つものだ。このモジュールを書いた経緯もともと『近い点を同一視』する処理を実現するために書いた。このように新たな発見があるものだから、teratailは面白い。*3そこそこ便利なので、PyPIにアップする練習に使っても良いかもしれない。似たようなモジュールがあるんだろうけど。追記:2018/01/26more_itertools.partitionという同様の関数が存在することが発覚。これは2クラス分類しか出来ないようだ。True.*1:C++ならば、operations.hppをインクルードすれば利用可能かもしれない。Pythonの場合その手段は選べない。提供されているのはバインディングだからだ。*2:2018/1/17時点でStarが6つも付いていれば信用していいんじゃないかな。Godovykh女史に感謝。*3:記事の最初の方にさりげなくリンクを張ってあるが、OpenCVのpartitionを知ったのも回答するための調査の過程であった。悟りを得たくて、神の言語Lispに手を付けてみた。クソコードを書きたい。検索プロフィールid:LouiSプログラミングや趣味や。*/はてなブログをはじめよう!LouiSさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。