Menu
CoddyTech

常见矩阵操作

本课属于 Coddy C# 学习旅程的“逻辑与流程”单元。第 6 课,共 66 课。

矩阵在数学和计算机科学中很常见。让我们来了解一些二维数组的常见操作。

将两个矩阵相加:

int[][] AddMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int[][] result = new int[rows][];
    
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[a[i].Length];
        for (int j = 0; j < a[i].Length; j++)
        {
            result[i][j] = a[i][j] + b[i][j];
        }
    }
    return result;
}

转置矩阵(交换行和列):

int[][] Transpose(int[][] matrix)
{
    int rows = matrix.Length;
    int cols = matrix[0].Length;
    
    int[][] result = new int[cols][];
    for (int i = 0; i < cols; i++)
    {
        result[i] = new int[rows];
        for (int j = 0; j < rows; j++)
        {
            result[i][j] = matrix[j][i];
        }
    }
    return result;
}

计算每一行的总和:

int[] RowSums(int[][] matrix)
{
    int rows = matrix.Length;
    int[] sums = new int[rows];
    
    for (int i = 0; i < rows; i++)
    {
        int sum = 0;
        for (int j = 0; j < matrix[i].Length; j++)
        {
            sum += matrix[i][j];
        }
        sums[i] = sum;
    }
    return sums;
}

将两个矩阵相乘:

在矩阵乘法中,每个元素 result[i][j] 的计算方法是:取第一个矩阵的第 i 行和第二个矩阵的第 j 列,将对应元素相乘,再把乘积相加。形式化地说:对于所有有效的 k 值,result[i][j] = sum of matrix1[i][k] * matrix2[k][j]。
要实现这一点,matrix1 的列数必须等于 matrix2 的行数。结果矩阵的维度为 [matrix1.rows × matrix2.cols]。

int[][] MultiplyMatrices(int[][] a, int[][] b)
{
    int rows = a.Length;
    int cols = b[0].Length;
    int inner = b.Length;
    
    int[][] result = new int[rows][];
    for (int i = 0; i < rows; i++)
    {
        result[i] = new int[cols];
        for (int j = 0; j < cols; j++)
        {
            int sum = 0;
            for (int k = 0; k < inner; k++)
            {
                sum += a[i][k] * b[k][j];
            }
            result[i][j] = sum;
        }
    }
    return result;
}
challenge icon

挑战

困难

创建一个名为 multiplyMatrices 的方法,它:

  1. 接收两个矩阵(二维锯齿数组)作为参数:matrix1 和 matrix2
  2. 按照矩阵乘法的规则将它们相乘
  3. 返回结果矩阵

矩阵乘法要有效,必须满足:

  • matrix1 的列数必须等于 matrix2 的行数
  • 结果的维度为:[matrix1.rows × matrix2.columns]

矩阵乘法的运算方式:
结果中位置 [i][j] 的每个元素,都通过取 matrix1 的第 i 行和 matrix2 的第 j 列,将对应元素相乘,再把所有乘积相加来计算:

result[i][j] = matrix1[i][0] * matrix2[0][j] + matrix1[i][1] * matrix2[1][j] + ...

换句话说:对于每个 k,result[i][j] = sum of (matrix1[i][k] * matrix2[k][j])。

例如,如果 matrix1 是:

[1, 2]
[3, 4]

而 matrix2 是:

[5, 6]
[7, 8]

那么 result[0][0] = 1*5 + 2*7 = 19,result[0][1] = 1*6 + 2*8 = 22,依此类推。结果应为:

[19, 22]
[43, 50]

如果矩阵无法相乘,则返回 null。

亲手试试

public class MultiplyMatrices
{
    // 实现 MultiplyMatrices 方法
    public static int[][] multiplyMatrices(int[][] matrix1, int[][] matrix2)
    {
        // 在这里编写你的代码
        
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C# 在线编译器