Существует ли тип Boost (или другой общий lib) для матриц со строковыми ключами? - PullRequest
0 голосов
/ 22 мая 2010

У меня плотная матрица, где индексы соответствуют генам. Хотя идентификаторы генов часто являются целыми числами, они не являются смежными целыми числами. Вместо этого они тоже могут быть строками.

Полагаю, я мог бы использовать какую-то разреженную матрицу усиления с целочисленными ключами, и не было бы значения, если они смежные. Или это все еще занимало бы много места, особенно если у некоторых генов есть идентификаторы, которые состоят из девяти цифр?

Кроме того, я обеспокоен тем, что разреженное хранилище не подходит, так как это общая матрица (в каждой клетке будет расстояние, если существует ген).

Мне вряд ли понадобится выполнять какие-либо матричные операции (например, матричное умножение). Мне нужно будет вытащить векторы из матрицы (срезы).

Кажется, что лучший тип матрицы будет иметь ключ Boost unordered_map (карта хеша) или, возможно, даже просто карта STL.

Я смотрю на это неправильно? Мне действительно нужно свернуть свое? Я думал, что видел такой класс где-то раньше.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 мая 2010

Если вам не нужны матричные операции, вам не нужна матрица. 2D-карту со строковыми ключами можно создать с помощью map<map<string> > в простом C ++ или, соответственно, использовать хэш-карту из Boost.

2 голосов
/ 22 мая 2010

Вы можете использовать std::map для сопоставления идентификаторов генов с уникальными, последовательно назначенными целыми числами (каждый раз, когда вы добавляете новый идентификатор гена на карту, вы можете присвоить ему размер карты в качестве идентификатора, при условии, что вы никогда не удаляете гены с карты).

Если вы хотите иметь возможность искать идентификатор гена по его уникальному целому числу, вы можете использовать вторую карту или boost::bimap, которая обеспечивает двунаправленное отображение элементов.

Что касается того, какой контейнер матрицы использовать, вы можете рассмотреть boost::ublas::matrix; он обеспечивает векторный доступ к строкам и столбцам матрицы.

0 голосов
/ 22 мая 2010

Существует Boost.MultiArray, который позволит вам работать с непостоянными индексами.

Если вы хотите, чтобы эффективная реализация работала с матрицами со статическим размером, есть также Boost.LA , который в настоящее время находится на графике обзора.

И, кроме того, есть также NT2 , который должен быть скоро отправлен в Boost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...