重複の可能性:
MATLAB のハッシュ テーブル
一般的な質問
Matlabでハッシュセットまたはハッシュマップ構造を取得する方法はありますか?
一意のエントリを見つけたり、ベクトルのメンバーシップを確認したりする必要があり、unique()
または論理インデックスなどのコマンドを使用すると、ベクトルを検索するように見え、大きな値のセットでは非常に遅い状況に陥ることがよくあります。Matlabでこれを行う最良の方法は何ですか?
例
たとえば、素数のリストがあり、3 が素数かどうかを確認したいとします。
primes = [2,3,5,7,11,13];
if primes(primes==3)
disp('yes!')
else
disp('no!')
end
長いベクトルでこれを行うと、何度も物事が本当に遅くなります。
他の言語では
基本的に、Matlab にはpython のset()
and dict()
、または同様に Java のjava.util.HashSet
andに相当するものはありますか? java.util.HashMap
そうでない場合、大きなベクトルでルックアップを行う良い方法はありますか?
編集:答えの考察
これは、回答の提案で得た実行時間です。
>> b = 1:1000000;
>> tic; for i=1:100000, any(b==i);; end; toc
Elapsed time is 125.925922 seconds.
s = java.util.HashSet();
>> for i=1:1000000, s.add(i); end
>> tic; for i=1:100000, s.contains(i); end; toc
Elapsed time is 25.618276 seconds.
>> m = containers.Map(1:1000000,ones(1,1000000));
>> tic; for i=1:100000, m(i); end; toc
Elapsed time is 2.715635 seconds
Java セットの構築も非常に遅かったため、問題によってはこれも非常に遅くなる可能性があります。コンテナについて本当にうれしいです。地図のヒント。それは他の例を本当に破壊し、セットアップも瞬時でした.