C#实现矩阵转置的方法
本文提供C#二维数组矩阵转置的完整实现方案,包含合法性校验、核心转置逻辑及控制台输出演示。
C#矩阵转置的实现原理
矩阵转置的核心在于行列互换。对于一个 m x n 的矩阵,其转置矩阵为 n x m,即原矩阵中的元素 A[i, j] 在转置后变为 B[j, i]。在C#中使用锯齿数组(Array of Arrays,如 double[][])时,需要特别注意内存布局与索引逻辑的处理。
第1步:构建矩阵合法性检查函数
在进行转置前,必须确保输入的二维数组是严格的“矩形”结构(即每一行的长度相等)。这一步能防止后续访问越界异常。
/// <summary>
/// 判断一个二维数组是否为合法的矩阵
/// </summary>
/// <param name="matrix">二维数组</param>
/// <returns>true:是矩阵 false:不是矩阵</returns>
private static bool isMatrix(double[][] matrix)
{
// 空矩阵或长度为0视为合法边界情况
if (matrix.Length < 1) return true;
// 获取首行长度作为标准
int count = matrix[0].Length;
// 遍历其余行,检查是否长度一致
for (int i = 1; i < matrix.Length; i++)
{
if (matrix[i].Length != count)
{
return false;
}
}
return true;
}
第2步:实现核心转置算法
此函数执行实际的转置操作。它首先进行合法性校验,然后创建一个新大小的矩阵,最后通过嵌套循环将 matrix[j][i] 赋值给 result[i][j]。
/// <summary>
/// 求一个矩阵的转置矩阵
/// </summary>
/// <param name="matrix">原始矩阵</param>
/// <returns>转置后的新矩阵</returns>
private static double[][] MatrixTranspose(double[][] matrix)
{
// 1. 合法性检查
if (!isMatrix(matrix))
{
throw new Exception("matrix 不是一个合法的矩形矩阵");
}
// 2. 处理空矩阵边界
if (matrix.Length == 0)
{
return new double[][] { };
}
// 3. 创建目标矩阵:行列数与原矩阵相反
// 假设原矩阵为 MxN,则结果矩阵为 NxM
double[][] result = new double[matrix[0].Length][];
for (int i = 0; i < result.Length; i++)
{
result[i] = new double[matrix.Length];
}
// 4. 执行转置赋值:b[i,j] = a[j,i]
for (int i = 0; i < result.Length; i++)
{
for (int j = 0; j < result[0].Length; j++)
{
result[i][j] = matrix[j][i];
}
}
return result;
}
第3步:完善打印辅助函数
为了直观查看效果,需要一个按行打印的函数。注意使用字符串拼接时,制表符应显式转换为字符串,避免字符编码歧义。
/// <summary>
/// 打印矩阵到控制台
/// </summary>
/// <param name="matrix">待打印矩阵</param>
private static void PrintMatrix(double[][] matrix)
{
for (int i = 0; i < matrix.Length; i++)
{
for (int j = 0; j < matrix[i].Length; j++)
{
// 使用 + "\t" 确保制表符正确插入
Console.Write(matrix[i][j] + "\t");
}
Console.WriteLine();
}
}
第4步:完整调用示例与结果验证
在 Main 方法中定义测试数据,分别打印原矩阵与转置后的矩阵,以验证逻辑正确性。
static void Main(string[] args)
{
// 定义一个 3行 x 4列 的矩阵
double[][] matrix = new double[][]
{
new double[] { 1, 2, 3, 4 },
new double[] { 4, 5, 6, 7 },
new double[] { 7, 8, 9, 10}
};
// 打印原矩阵
PrintMatrix(matrix);
Console.WriteLine("--- 分隔线 ---");
// 调用转置函数并打印结果
PrintMatrix(MatrixTranspose(matrix));
Console.ReadLine();
}
从上图可知,原矩阵为 3×4 结构,转置后成功变为 4×3 结构,行列对应关系转换正确。
以上就是C#实现矩阵转置的详细内容,更多关于C#矩阵操作及算法优化的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













