创建反对角单位矩阵

时间:2018-06-18 13:27:36

标签: c# mathnet

我有一个使用MathNet Numerics存储在DenseMatrix中的图像。

要将图像逆时针旋转90度,我想获得转置,然后通过乘以反对角单位矩阵垂直翻转结果。

是否有快速方法来初始化该单位矩阵?

对于看似如下的2x2矩阵:

0 1 
1 0

更新

我最终做了约瑟夫建议的事情。结果证明足够快。

public static Matrix<double> CreateAntiIdentityMatrix(int n)
    {
        var output = Matrix<double>.Build.Dense(n, n, 0);
        for (int i = 0; i <= n - 1; i++)
        {
            output[i, n - i - 1] = 1;
        }
        return output;
    }

2 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

var M = MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(N, N, 0);
for (i = 0; i <= N - 1; i++)
{
    M(i, N - i - 1) = 1;
}

答案 1 :(得分:0)

@Joseph的方法很快。但是我想介绍一种表达MathNet功能的方法:

var size = 3;
var diagonal = DenseMatrix.CreateDiagonal(size, size, 1);
Console.WriteLine(diagonal);

var reversedColumns = diagonal.EnumerateColumns().Select(c => c.Reverse());
var anti = DenseMatrix.OfColumns(reversedColumns);
Console.WriteLine(anti);

要获得反对角矩阵,可以取一个对角矩阵,然后按宽度(反列)将其反射。

结果是:

DenseMatrix 3x3-Double
1  0  0
0  1  0
0  0  1

DenseMatrix 3x3-Double
0  0  1
0  1  0
1  0  0