Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Nhận hai mảng 2D số và trả về kết quả nhân ma trận - JavaScript

Chúng ta cần viết hàm JavaScript nhận hai mảng 2D số và trả về kết quả nhân ma trận.

Giả sử hai ma trận:

// 5 x 4 
let a = [ 
  [1, 2, 3, 1], 
  [4, 5, 6, 1], 
  [7, 8, 9, 1], 
  [1, 1, 1, 1], 
  [5, 7, 2, 6] 
]; 
// 4 x 6 
let b = [ 
  [1, 4, 7, 3, 4, 6], 
  [2, 5, 8, 7, 3, 2], 
  [3, 6, 9, 6, 7, 8], 
  [1, 1, 1, 2, 3, 6] 
];

Ví dụ

Mã hàm nhân ma trận:

const multiplyMatrices = (a, b) => { 
  if (!Array.isArray(a) || !Array.isArray(b) || !a.length || !b.length) { 
    throw new Error('arguments should be in 2-dimensional array format'); 
  } 
  let x = a.length, 
      z = a[0].length, 
      y = b[0].length; 
  if (b.length !== z) { 
    throw new Error('number of columns in the first matrix should be the same as the number of rows in the second'); 
  } 
  let productRow = Array.apply(null, new Array(y)).map(Number.prototype.valueOf, 0); 
  let product = new Array(x); 
  for (let p = 0; p < x; p++) { 
    product[p] = productRow.slice(); 
  } 
  for (let i = 0; i < x; i++) { 
    for (let j = 0; j < y; j++) { 
      for (let k = 0; k < z; k++) { 
        product[i][j] += a[i][k] * b[k][j]; 
      } 
    } 
  } 
  return product; 
} 
// 5 x 4 
let a = [ 
  [1, 2, 3, 1], 
  [4, 5, 6, 1], 
  [7, 8, 9, 1], 
  [1, 1, 1, 1], 
  [5, 7, 2, 6] 
]; 
// 4 x 6 
let b = [ 
  [1, 4, 7, 3, 4, 6], 
  [2, 5, 8, 7, 3, 2], 
  [3, 6, 9, 6, 7, 8], 
  [1, 1, 1, 2, 3, 6] 
]; 
// Kết quả 5 x 6 
console.log(multiplyMatrices(a, b));

Kết quả

Đầu ra trên console:

[ 
  [ 15, 33, 51, 37, 34, 40 ], 
  [ 33, 78, 123, 85, 76, 88 ], 
  [ 51, 123, 195, 133, 118, 136 ], 
  [ 7, 16, 25, 18, 17, 22 ], 
  [ 31, 73, 115, 88, 73, 96 ] 
]