Я ищу тензорную библиотеку C ++, которая поддерживает независимый от измерения код. В частности, мне нужно выполнять операции по каждому измерению (до 3), например, вычислять взвешенную сумму. Размеры - это параметр шаблона (и, следовательно, константа времени компиляции). Другое ограничение заключается в том, что библиотека должна быть относительно легкой, поэтому скорее в стиле Eigen / Boost, чем в Trilinos / PETSc.
Какие-либо предложения?
Примечание: я посмотрел на Eigen и думаю, что он почти точно соответствует профилю, если бы он не был ограничен 2D тензорами. Если я ошибаюсь, поправьте меня.
Я думаю, что эта новая
taco
библиотека действительно хороша.Tensor Algebra Compiler (taco) - это библиотека C ++, которая вычисляет выражения тензорной алгебры на разреженных и плотных тензорах. Он использует новые методы компилятора для обеспечения конкурентоспособности производительности с оптимизированными вручную ядрами в широко используемых библиотеках как для разреженной тензорной алгебры, так и для разреженной линейной алгебры.
Вы можете использовать taco в качестве библиотеки C ++, которая позволяет загружать тензоры, читать тензоры из файлов и вычислять выражения тензоров. Вы также можете использовать taco в качестве генератора кода, который генерирует функции C, которые вычисляют тензорные выражения.
Обсуждение: https://www.youtube.com/watch?v=Kffbzf9etLE. Бумага: http://tensor-compiler.org/kjolstad-oopsla17-tensor-compiler.pdf.
источник
XTensor - это современный подход, который становится все более популярным. https://github.com/QuantStack/xtensor
источник
Библиотека deal.II ( http://www.dealii.org ), хотя и написана для гораздо более широких целей, также содержит подбиблиотеку тензорных классов, которая, вероятно, выполняет большую часть того, что вы хотите сделать. В частности, он использует шаблоны для измерения.
(Отказ от ответственности: я являюсь одним из основных авторов этой библиотеки.)
источник
Библиотека Boost.Numeric.uBlas недавно добавила тензорное расширение, которое поставляется с Boost версии 1.70. Пожалуйста, посмотрите на https://github.com/boostorg/ublas . Он предоставляет стандартные матричные и тензорные операции с переменным во время выполнения порядком (количество измерений), измерения для форматов хранения первого и последнего порядка (столбец и ряд строки). Вы можете также легко использовать соглашение суммирования Эйнштейна, чтобы выразить aribtrary тензорные умножения. Boost.Numeric.uBlas является только заголовком и легко интегрируется в существующие проекты.
источник
Я не использовал это сам, но libtensor, кажется, выполняет ваши требования.
источник
это многомерный массив C ++ библиотеки https://github.com/ContinuumIO/libdynd
источник
LTensor ( https://code.google.com/p/ltensor/ ) - это ОЧЕНЬ простая в использовании библиотека шаблонов C ++ для тензоров до ранга 4 (на основе обычной записи), а также быстрая и легкая. Вам не нужно ничего компилировать, нужно только включить основной заголовочный файл. Я использовал его в нескольких проектах и работал нормально.
Он имеет некоторые встроенные функции для тензоров ранга 2, таких как линейные решатели, svd, LU и разложения Холецкого, и т. Д. Я не использовал ни одну из них (я использую другие библиотеки для этого).
источник
Также есть ITensor (требуется C ++ 17).
источник