Швидка, легка тензорна бібліотека C ++ для розмірно-агностичного коду


20

Я шукаю тензорну бібліотеку C ++, яка підтримує розмірно-агностичний код. Зокрема, мені потрібно виконувати операції вздовж кожного виміру (до 3), наприклад обчислення зваженої суми. Розміри є параметром шаблону (і, таким чином, константа часу компіляції). Ще одне обмеження полягає в тому, що бібліотека повинна бути відносно легкою, тому скоріше стиль Eigen / Boost, ніж Trilinos / PETSc.

Будь-які пропозиції?

Примітка. Я переглянув Eigen і думаю, що він майже точно відповідає профілю, якщо він не обмежувався двовимірними тензорами. Якщо я помиляюся цим, будь ласка, виправте мене.

Відповіді:


9

FTensor - це легка, лише заголовок, повністю шаблонна бібліотека, що включає ергономічні позначення підсумовування. Він пройшов обширну перевірку в 2, 3 та 4 вимірах, але повинен працювати добре для будь-якої кількості вимірів.


6

Чому він вартий, Eigen має клас Tensor як непідтримуваний модуль.

http://eigen.tuxfamily.org/dox-devel/unsupported/group_ CXX11 _Tensor__Module.html

Я сам не користувався цим, тому більше не можу сказати про це.

Бібліотека класів Armadillo має тензорний клас 3-го порядку.

http://arma.sourceforge.net/

Я також не використовував тензорні можливості Armadillo, але експериментував зі стандартними матричними класами, і вони здаються порівняно простими у використанні та мають хороші показники.


2
Більш конкретно, у Armadillo є клас Куб , який реалізує тензори 3-го порядку
mtall

6

Я думаю, що ця нова tacoлайка теж дуже хороша.

Компілятор алгебри Тензора (тако) - це бібліотека С ++, яка обчислює вирази тензорної алгебри на рідких і щільних тензорах. Він використовує нові методи компіляції, щоб досягти конкурентоспроможності з ядрами, оптимізованими вручну, у широко використовуваних бібліотеках як для рідкої алгебри тензора, так і для рідкої лінійної алгебри.

Ви можете використовувати тако як бібліотеку C ++, яка дозволяє завантажувати тензори, читати тензори з файлів та обчислювати вирази тензорів. Ви також можете використовувати тако як генератор коду, який генерує функції C, які обчислюють тензорні вирази.

Бесіда: https://www.youtube.com/watch?v=Kffbzf9etLE Папір: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf


2
Ласкаво просимо до SciComp.SE! Чи можете ви розширити свою відповідь, щоб описати бібліотеку (посилання можуть загинути) та особливо, як вона відповідає вимогам ОП? Інакше це більше коментар.
Крістіан Класон

Здається, дуже цікава бібліотека! Схоже, це створює додатковий крок компіляції. Мені цікаво, чи можна було б реалізувати це замість шаблонів?
HelloGoodbye


4

Бібліотека deal.II ( http://www.dealii.org ), хоч і написана для набагато більших цілей, також має підбібліотеку тензорних класів, яка, ймовірно, робить багато того, що ви хочете зробити. Зокрема, він використовує шаблони для виміру.

(Відмова: Я є одним з головних авторів цієї бібліотеки.)


2

Нещодавно бібліотека Boost.Numeric.uBlas додала розширення тензора, яке постачається з Boost версії 1.70. Будь ласка, подивіться на https://github.com/boostorg/ublas . Він забезпечує стандартні операції з матрицею та тензором із змінним порядком виконання (кількість вимірів), розмірами для форматів зберігання першого та останнього порядку (стовпці та основні рядки). Ви також можете легко використати конвенцію Ейнштейна для вираження множин множин тензора. Boost.Numeric.uBlas є лише заголовком і легко інтегрується в існуючі проекти.


Ви також можете спробувати пограти з бібліотекою на Godbolt: godbolt.org/z/Sf5V77
Cem Bassoy



1

LTensor ( https://code.google.com/p/ltensor/ ) - ДУЖЕ проста у користуванні бібліотека шаблонів C ++ для тензорів до 4-го рангу (на основі індикативних позначень), швидка і легка. Вам не потрібно нічого компілювати, лише потрібно включити головний файл заголовка. Я використовував це в декількох проектах і працював нормально.

Він має деякі вбудовані функції для тензорів рангу-2, такі як лінійні розв'язувачі, svd, LU та Чолеський розклади тощо. Я не використовував жодної з них (для цього я використовую інші бібліотеки).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.