Нижний треугольник матрицы в собственном

Как использовать библиотеку eigen для вычисления нижнего треугольника входной матрицы без изменения порядка столбцов?

например для матрицы:

A=[1 2 3;4 5 6 ;7 8 9]

Я хочу, чтобы результат был:

1 0 0
4 0 0
7 0 0

person abbas    schedule 25.06.2015    source источник
comment
Добро пожаловать на stackoverflow.com. Пожалуйста, найдите время, чтобы прочитать страницы справки, особенно разделы с именами На какие темы я могу задать здесь? и Какие типы вопросов мне следует избегать? . Также, пожалуйста, прочитайте о том, как задавать хорошие вопросы. Вы также можете узнать, как создать минимальный, полный и проверяемый пример.   -  person Some programmer dude    schedule 25.06.2015
comment
что ты уже испробовал? Что вы подразумеваете под без изменения порядка столбцов? Я не понимаю, чего именно вы хотите добиться, может быть, вы можете добавить минимальный пример!?   -  person Cleb    schedule 25.06.2015


Ответы (1)


Ваш текст и ваш пример не совпадают. Я рассмотрю три возможных способа понять ваш вопрос. Во-первых, мы настроим матрицу:

Matrix3d mat;
mat << 1, 2, 3, 4, 5, 6, 7, 8, 9;

Если вам нужна фактическая нижняя треугольная матрица, вы должны использовать:

std::cout << Matrix3d(mat.triangularView<Lower>()) << "\n\n";

или похожие. Результат:

1 0 0
4 5 0
7 8 9

Обратите внимание на 5,8,9, которых нет в вашем примере. Если вам просто нужен самый левый столбец, вы должны использовать:

std::cout << mat.col(0) << "\n\n";

который дает

1
4
7

Если (как показывает вторая часть вашего примера) вы хотите mat * [1, 0, 0], вы можете либо выполнить матричное умножение (не рекомендуется), либо просто построить результат:

Matrix3d z = Matrix3d::Zero();
z.col(0) = mat.col(0);

std::cout << z << "\n\n";

который дает тот же результат, что и ваш пример:

1 0 0
4 0 0
7 0 0
person Avi Ginsburg    schedule 29.06.2015