C# 创建反对角单位矩阵

C# 创建反对角单位矩阵,c#,math.net,C#,Math.net,我有一个图像存储在DenseMatrix中,使用MathNet Numerics 对于逆时针旋转90度的图像,我想得到转置,然后通过乘以反对角单位矩阵垂直翻转结果 有没有一种快速的方法来初始化身份矩阵 对于2x2矩阵,其如下所示: 0 1 1 0 更新: 我最终做了@Joseph建议的事情。结果证明速度足够快 public static Matrix<double> CreateAntiIdentityMatrix(int n) { var output = Matrix

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

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

有没有一种快速的方法来初始化身份矩阵

对于2x2矩阵,其如下所示:

0 1 
1 0
更新:

我最终做了@Joseph建议的事情。结果证明速度足够快

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;
}
公共静态矩阵CreateAntiIdentityMatrix(int n)
{
var输出=矩阵.Build.densite(n,n,0);

对于(int i=0;i这样的东西应该可以工作:

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;
}
var M=MathNet.Numerics.LinearAlgebra.Double.Matrix.Build.Dense(N,N,0);
对于(i=0;i@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