Есть ли двунаправленная структура данных карты в Matlab, которая более эффективна, чем использование контейнеров. Клавиши и значения карты в противоположном направлении? Также каков наиболее эффективный способ использования обычных карт для этой цели?Есть двунаправленная карта в Matlab?
3
A
ответ
4
Класс containers.Map
не поддерживает двунаправленное сопоставление (с R2014b). Методы, поддерживаемые приведены в doc containers.Map
:
isKey
: Определить, еслиcontainers.Map
объект содержит ключkeys
: Определить ключи отcontainers.Map
объектаlength
: длинаcontainers.Map
объектаremove
: Удалить ключ-значение пар отcontainers.Map
объектsize
: Размерcontainers.Map
объектvalues
: Определить значенияcontainers.Map
объекта
Вы можете либо реализовать эту функцию самостоятельно, путем создания
inverse = containers.Map(original.values, original.keys)
Или используйте Map2 -класса предоставленный Mikko Leppänen o п Обмен файла:
[...] Кроме того, двунаправленная использование пар ключ-значение поддерживается (например, библиотеки Boost.Bimap).
Если пар ключ-значение являются положительными целыми числами, и вы редко изменить карту, вы можете использовать sparse
, который должен быть достаточно эффективным.
map = sparse(keys, 1, values);
inverseMap = sparse(nonzeros(map), 1, find(map))
Какие данные вы хотите сохранить? – knedlsepp
Сопоставление целых чисел – Dandelion
Пожалуйста, добавьте примерные данные к вашему вопросу. Также расскажите, как часто вы собираетесь вставлять новые данные или удалять данные на свою двунаправленную карту. Различные решения будут демонстрировать разную эффективность для разных случаев использования. Для положительных целых чисел вы можете попробовать ['разреженный'] (http://www.mathworks.com/help/matlab/ref/sparse.html). – knedlsepp