[解決済み] MATLABのハッシュテーブル
質問
MATLABはハッシュテーブルをサポートしていますか?
いくつかの背景
私はMatlabで、画像のスケール空間表現を必要とする問題に取り組んでいます。これを行うために、私は分散が
sigma*s^k
に対して
k
をある範囲に分割し、それぞれを順番に使って画像にフィルタをかけています。 さて、私は、ある種のマッピングが欲しいのです。
k
からフィルタリングされた画像へのマッピングが必要です。
もし
k
が常に整数であれば、単純にそのような3D配列を作成します。
arr[k] = <image filtered with k-th guassian>
しかし
k
が整数であるとは限らないので、これはできない。 そこで思いついたのが
k
をそのような配列にしておくことです。
arr[find(array_of_ks_ = k)] = <image filtered with k-th guassian>
これは一見とても良いように見えますが、このルックアップを潜在的に数千回行う可能性があり、20から30の値の
k
の値でこのルックアップを潜在的に何千回も行うことになり、これがパフォーマンスに影響を与えることを懸念しています。
ルックアップ時間が O(n) ではなく O(1) になるように、ある種のハッシュ テーブルでこれを行う方が良いのではと思います。
今、私は時期尚早に最適化すべきではないことを知っていますし、この問題はまったくないかもしれませんが、これは背景に過ぎず、これが本当に最善の解決策であるケースがあるかもしれないことを覚えておいてください。 私の の問題に対する最善の解決策であるかどうかにかかわらず、これが本当に最善の解決策である場合があることを忘れないでください。
どのように解決するのですか?
Matlabはハッシュテーブルをサポートしていません. EDIT r2010a までは、です。 アムロ の回答を見てください。
検索を高速化するために、以下のように
find
を削除して
論理インデックス
.
arr{array_of_ks==k} = <image filtered with k-th Gaussian>
または
arr(:,:,array_of_ks==k) = <image filtered with k-th Gaussian>
しかし、Matlabのすべての経験において、私は 決して ルックアップがボトルネックになったことはありません。
特定の問題を高速化するために、私はインクリメンタルフィルタリングを使用することをお勧めします。
arr{i} = GaussFilter(arr{i-1},sigma*s^(array_of_ks(i)) - sigma*s^(array_of_ks(i-1)))
仮定
array_of_ks
は昇順にソートされ、GaussFilterは分散に基づいてフィルタマスクサイズを計算します(そして、もちろん2つの1次元フィルタを使用します)。また、フーリエ空間でフィルタリングすることもでき、これは特に大きな画像や分散が等間隔である場合(残念ながらそうではない場合がほとんどですが)に有用です。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン