我目前正在用C#实现矩阵。这不是关于如何工作或类似问题的问题。这更多关乎“设计部分”...因此,我想实现一个函数,它可以转置矩阵(http://en.wikipedia.org/wiki/Transpose)。虽然很简单,但对我来说选择最优雅的实现方式真的很困难。
以下是矩阵类的一些代码:
你更喜欢哪种方式以及为什么?或者有更好的方法来实现矩阵转置吗?感谢!Benjamin
以下是矩阵类的一些代码:
namespace Math
{
public class Matrix
{
protected double[,] matrix;
public Matrix(byte m, byte n)[...]
public Matrix(Matrix matrix)[...]
public byte M { get; private set; }
public byte N { get; private set; }
// Possibility 1 (changes the matrix directly)
public void Transpose()[...]
// Possibility 2 (getter method)
public Matrix GetTransposed()[...]
// Possibility 3 (property)
public Matrix TransposedMatrix
{
get[...]
}
// Possibility 4 (static method; a bit like an operator)
public static Matrix Transpose(Matrix matrix)[...]
}
}
下面是如何使用不同的选项:
namespace MathTest
{
class Program
{
static void Main(string[] args)
{
// Create a new matrix object...
var mat1 = new Math.Matrix(4, 4);
// Using possibility 2 (getter method, like "GetHashCode()" or sth. similar)
var mat2 = mat1.GetTransposed();
// Using possibility 3 (the transposed matrix is a property of each matrix)
var mat3 = mat1.TransposedMatrix;
// Using possibility 4 (definition and use is like an unary operator)
var mat4 = Math.Matrix.Transpose(mat1);
// Using possibility 1 (changes the matrix directly)
mat1.Transpose();
}
}
}
你更喜欢哪种方式以及为什么?或者有更好的方法来实现矩阵转置吗?感谢!Benjamin