跳过线性代数的开发者的矩阵数学

发布: (2026年3月25日 GMT+8 10:02)
4 分钟阅读
原文: Dev.to

Source: Dev.to

矩阵与基本操作

表示

矩阵只是一个二维数字数组。例如,一个 3×3 矩阵:

123
456
789

在 JavaScript 中可以这样创建:

const matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

元素逐项相加

两个矩阵必须具有相同的维度。

function add(A, B) {
  return A.map((row, i) => row.map((val, j) => val + B[i][j]));
}

矩阵乘法

乘法 不是 元素逐项的。结果中位置 (i, j) 的元素是 A 的第 i 行与 B 的第 j 列的点积。
要求:A 的列数必须等于 B 的行数。一个 m×n 矩阵乘以一个 n×p 矩阵得到一个 m×p 矩阵。

function multiply(A, B) {
  const rows = A.length;
  const cols = B[0].length;
  const n = B.length;

  const result = Array.from({ length: rows }, () =>
    Array(cols).fill(0)
  );

  for (let i = 0; i 
    Array.from({ length: n }, (_, j) => (i === j ? 1 : 0))
  );
}

转置

交换行和列;第 i 行变为第 i 列。

function transpose(M) {
  return M[0].map((_, j) => M.map(row => row[j]));
}

转置在机器学习流水线中经常使用,用来在 “特征‑列” 与 “特征‑行” 布局之间切换。

行列式

方阵的行列式是一个单一数值,用来指示可逆性(非零)或奇异性(零)。

2×2 行列式:

function det2x2(M) {
  return M[0][0] * M[1][1] - M[0][1] * M[1][0];
}

通用行列式(余子式展开):

function determinant(M) {
  const n = M.length;
  if (n === 1) return M[0][0];
  if (n === 2) return det2x2(M);

  let det = 0;
  for (let j = 0; j 
      [...row.slice(0, j), ...row.slice(j + 1)]
    );
    det += M[0][j] * determinant(minor) * (j % 2 === 0 ? 1 : -1);
  }
  return det;
}

实际应用

CSS 变换

每个 CSS 变换(translaterotatescaleskew)在内部都表示为矩阵操作。浏览器会构建一个 4×4 的变换矩阵并将其应用到每个像素上。

/* CSS 声明 */
transform: rotate(45deg) scale(1.5) translate(10px, 20px);

/* 在内部计算为矩阵 */
transform: matrix(1.06, 1.06, -1.06, 1.06, -11.21, 25.61);

3D 图形

游戏引擎和 3D 渲染器使用 4×4 矩阵进行相机定位、对象变换以及从三维世界空间到二维屏幕空间的投影。

机器学习

神经网络本质上是一系列矩阵乘法(权重)与非线性激活函数交替进行的过程。训练过程就是在调整这些权重矩阵。

图像处理

卷积滤波器(模糊、锐化、边缘检测)通过小卷积核——即矩阵——与局部图像块相乘来实现。

实用工具

想要快速、交互式地进行计算(乘法、行列式、逆矩阵、转置、特征值等),可以尝试以下免费在线矩阵计算器:

矩阵计算器 – zovo.one/free-tools/matrix-calculator

0 浏览
Back to Blog

相关文章

阅读更多 »

网络怀旧

概述 我一直对互联网的快速演变感到着迷。从90年代那种杂乱、色彩斑斓的网站,到今天的简洁、极简设计——它……

Show HN: 字母时钟

请提供您希望翻译的具体摘录或摘要内容,我才能为您进行翻译。