矩阵点积

-

// 复习一下矩阵的乘法
//    [a00 a01 a02]     [b00 b01 b02]
//  A=[a10 a11 a12]   B=[b10 b11 b12]
//    [a20 a21 a22]     [b20 b21 b22]
// 将两个3*3的矩阵A,B相乘得到
// [a00*b00 + a01*b10 + a02*b20  a00*b01 + a01*b11 + a02*b21  a00*b02 + a01*b12 + a02*b22]
// [a10*b00 + a11*b10 + a12*b20  a10*b01 + a11*b11 + a12*b21  a10*b02 + a11*b12 + a12*b22]
// [a20*b00 + a21*b10 + a22*b20  a20*b01 + a21*b11 + a22*b21  a20*b02 + a21*b12 + a22*b22]

 

以下是用js做了一个矩阵点积的计算:

矩阵点积:计算行和列之间的乘积之和,也叫矩阵乘积

 第一个矩阵的列数必须等于第二个矩阵的行数。如果第一个矩阵的维度是(m×n),则需要第二个矩阵的维度必须为(n×x),得到的结果矩阵的维度为(m×x)。

 

 

 

 

 

 js代码:

复制代码
const a = [ // 3 * 2的矩阵  3行2列
  [1,2],
  [3,4],
  [5,6]
]
const b = [ // 2 * 1 的矩阵 2行1列
  [2],
  [4]
]
// a和b矩阵满足a的列数=b的行数 可以做矩阵点积计算
function dianJi(a, b) {
  const width = a.length;
  const height = b.length;
  const result = [];
  for(let x = 0; x < width; x++) { // 遍历a的行数
    const row = [];
    for(let y = 0; y < b[0].length; y++) { // 遍历b的列数
      let sum = 0;
      for(let i = 0; i < a[0].length; i++) { // 遍历a的列数
        sum += a[x][i] * b[i][y];
      }
      row[y] = sum;
    }
    result[x] = row;
  }
  return result;
}
const r = dianJi(a, b); // 生成3 * 1的矩阵
console.log(r, '3*1');
复制代码

 

 

 

 

 

 

 

复制代码
const a2 = [
  [1,2,3],
  [4,5,6],
  [7,8,10],
  [11,12,13]
]
const b2 = [
  [2,7],
  [1,2],
  [3,6]
]
const r2 = dianJi(a2, b2); // 生成3 * 1的矩阵
console.log(r2, '4*2');
复制代码

 

 

 

-

posted @   古墩古墩  Views(4604)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2022-01-08 electron右键菜单、托盘、通知、应用菜单、文件菜单浏览、确认对话框
点击右上角即可分享
微信分享提示