我正在使用Eigen C ++库的triangleView功能来跳过矩阵的上三角形部分的计算,如下所示:
C.triangularView<Lower>() = A*B;
这符合我的意图,但当我使用&#34; StrictlyLower&#34;为了跳过对角线的计算,结果矩阵似乎已损坏。以下是示例代码:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
MatrixXi A, B, C, D;
A = MatrixXi::Ones(5,5);
B = MatrixXi::Ones(5,5);
C = MatrixXi::Zero(5,5);
D = MatrixXi::Zero(5,5);
C.triangularView<Lower>() = A*B;
D.triangularView<StrictlyLower>() = A*B;
cout << "\n C = \n " << C << endl;
cout << "\n D = \n " << D << endl;
}
输出:
C =
5 0 0 0 0
5 5 0 0 0
5 5 5 0 0
5 5 5 5 0
5 5 5 5 5
D =
5 5 5 5 0
0 5 5 5 0
0 0 5 5 0
0 0 0 5 0
0 0 0 0 5
现在C看起来像我期待的那样。但D应该是相同的,除了对角线上的0。 为什么D看起来像这样,这是一个已知问题?