Возможный дубликат:
Хэш-таблицы в MATLAB
Общий вопрос
Есть ли способ получить структуру hashset или hashmap в Matlab?
Я часто нахожусь в ситуациях, когда мне нужно найти уникальные записи или проверить принадлежность к векторам и использовать команды типа unique()
, или, по-видимому, логическая индексация выполняет поиск по векторам и очень медленна для больших наборов значений. Каков наилучший способ сделать это в Matlab?
Пример
Скажем, например, что у меня есть список простых чисел и вы хотите проверить, является ли 3 простым:
primes = [2,3,5,7,11,13];
if primes(primes==3)
disp('yes!')
else
disp('no!')
end
если я делаю это с длинными векторами, и много раз все становится очень медленным.
В других языках
В принципе, существуют ли какие-либо эквиваленты для python set()
и dict()
, или аналогично Java java.util.HashSet
и java.util.HashMap
, в Matlab? А если нет, есть ли хороший способ делать поиск в больших векторах?
Изменить: отражение ответов
Это время, которое я получил от предложений в ответах.
>> 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-набора была довольно медленной, хотя в зависимости от проблемы это могло быть довольно медленным. Очень рад о контейнерах. Это действительно разрушает другие примеры, и это было мгновенно в настройке тоже.