创建反对角单位矩阵
Creating anti-diagonal identity 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;
}
像这样的东西应该可以工作:
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;
}
@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
我有一个存储在 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;
}
像这样的东西应该可以工作:
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;
}
@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