Это запрос к библиотеке C ++ Eigen.
В моих вычислениях я часто сталкиваюсь с матрицами с блочной диагональной формой. Простой пример структуры приведен ниже.
Matrix6f M = Matrix6f::Zero(); //< M has a special structure
M.block<3, 3,>(0, 0) = Matrix3f::Random();
M.block<3, 3,>(3, 3) = Matrix3f::Random();
Matrix6f out = M * Matrix6f::Random(); //< Want to optimize this operation
Теперь, допустим, у меня плотная матрица 6x6 I
и мне нужно оценить продукт M*I
, есть ли способ избежать этого? выполнять избыточные умножения / сложения со всеми нулями, которые есть в M
. Если не считать явного умножения, то есть.
У Eigen есть эта замечательная особенность, где, если я делаю auto u = v + w
, я просто получаю оператор без фактической оценки. Похоже, это также работает с auto z = Matrix6f::Zero()
, и если бы я когда-либо делал Matrix6f out = z + Matrix6f::Random()
, я мог бы представить запись оператора на специальной матрице Zero
, чтобы я эффективно просто возвращал элементы случайной матрицы, не пытаясь добавить ноль. к этому.
Возможно ли что-то подобное для конкретного примера, который у меня есть в списке выше?