Eigen 3 Square Array, Разделенный на столбец Array - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу разделить каждую строку квадратного массива (b) транспонированием массива столбцов (a).

Тестовый код также находится на godbolt.org , в котором установлена ​​библиотека eigen 3.

Ожидаемый результат:

// before (a)
2
2
2
// before (b)
2 2 2
4 4 4
6 6 6
// after
1 1 1
2 2 2
3 3 3

Тест:

#include <Eigen/Eigen>
#include <iostream>
using namespace Eigen;

int main() {
    ArrayXXf a(3, 1);
    a << 2, 2, 2;
    ArrayXXf b(3, 3);
    b << 2, 2, 2, 4, 4, 4, 6, 6, 6;
    std::cout << a << "\n";
    std::cout << b << "\n";
    b.rowwise() /= a.transpose();
    std::cout << b << "\n";
}

Ошибка компиляции

...
error: static assertion failed: YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX
...

Смежный вопрос:

Eigen: разделить каждую строку на последнюю строку

Принятым ответом является использование строк на собственных матрицах, преобразованных в собственные массивы.Я просто не понимаю, почему это не работает в моем случае ...

1 Ответ

0 голосов
/ 21 сентября 2018

Утверждение говорит вам, что вы используете матрицу (она же 2D массив), тогда как ожидается вектор времени компиляции (он же 1D массив).Поэтому решение состоит в том, чтобы определить a как одномерный массив времени компиляции:

ArrayXf a(3);

Вы также можете увидеть эту операцию в терминах стандартной линейной алгебры:

VectorXd a(3);
MatrixXd b(3,3);
b = b * a.asDiagonal().inverse();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...