Структура данных для представления разреженного тензора?

Какова подходящая структура данных для представления разреженного теснора в С++? Первый вариант, который приходит на ум, — это boost::unordered_map, поскольку он позволяет выполнять такие операции, как быстрая установка и извлечение элемента, как показано ниже:

A(i,j,k,l) = 5

Однако я также хотел бы иметь возможность выполнять сокращения по одному индексу, что включало бы суммирование по одному из индексов.

C(i,j,k,m) = A(i,j,k,l)*B(l,m)

Насколько легко было бы реализовать этот оператор с boost::unordered_map? Есть ли более подходящая структура данных?


person D R    schedule 09.08.2010    source источник
comment
В разреженном в каждом измерении? вы можете реализовать оболочку вокруг массива или карты ublas::sparse_matrix.   -  person Anycorn    schedule 10.08.2010


Ответы (1)


Доступны тензорные библиотеки, например:

http://www.codeproject.com/KB/recipes/tensor.aspx

а также

http://cadadr.org/fm/package/ftensor.html

Есть проблемы с ними? Таким образом, вы получите больше тензорных операций, используя карту.

person Scott Stafford    schedule 09.08.2010
comment
Все упомянутые вами библиотеки используют плотные тензоры, и мне нужно использовать разреженные тензоры, поскольку размеры моих тензоров слишком велики, чтобы их можно было эффективно представить в виде плотного тензора. - person D R; 10.08.2010