矩阵
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合
最早来自于方程组的系数及常数所构成的方阵,这一概念由19世纪英国数学家凯利首先提出。
多元计算时候,矩阵很常见
人工智能中,多元计算很常见,现在我们来实现一下矩阵的计算
代码实现
python代码numpy自己就有,但是我们现在给没有矩阵类的javascript添加一个矩阵类
/**
* 数学矩阵
*/
class Matrix {
constructor(arr) {
this._arr = arr;
}
/**
* 矩阵数组
*/
get arr() {
return this._arr;
}
/**
* 行
*/
get m() {
return this._arr.length;
}
/**
* 列
*/
get n() {
return this._arr[0].length;
}
/**
* 转置
*/
get T() {
const arr = new Array(this.n);
for (let i = 0; i < this.n; i++) {
arr[i] = new Array(this.m);
for (let j = 0; j < this.m; j++) {
arr[i][j] = this._arr[j][i];
}
}
return new Matrix(arr);
}
/**
* 克隆矩阵
* @returns {Array} 矩阵数组
*/
clone() {
const arr = new Array(this.m);
for (let i = 0; i < this.m; i++) {
arr[i] = new Array(this.n);
for (let j = 0; j < this.n; j++) {
arr[i][j] = this._arr[i][j];
}
}
return new Matrix(arr);
}
/**
* 获取整列
* @param {int} n 索引
* @returns {Array} 列
*/
col(index) {
const arr = [];
this._arr.forEach(row => {
arr.push(row[index]);
});
return arr;
}
}
我们可以用一个二维数组创建一个矩阵
// node --experimental-modules mat-init.mjs
import Matrix from './matrix.mjs';
const a = new Matrix([[1,3], [5,7], [9,1]]);
console.log('矩阵类', a);
console.log('矩阵尺寸', a.m, a.n);
console.log('矩阵第一行', a.row(0));
console.log('矩阵第一列', a.col(0));
console.log('转置', a.T);
可以看到我们的输出
矩阵类 Matrix { _arr: [ [ 1, 3 ], [ 5, 7 ], [ 9, 1 ] ] }
矩阵尺寸 3 2
矩阵第一行 [ 1, 3 ]
矩阵第一列 [ 1, 5, 9 ]
转制 Matrix { _arr: [ [ 1, 5, 9 ], [ 3, 7, 1 ] ] }
矩阵加法(Matrix addition)
矩阵加法,数学术语,定义为在数学里,矩阵加法一般是指两个矩阵把其相对应元素加在一起的运算
矩阵还有个定义叫“直和”(⊕)千万别跟加法弄混了
加法
通常的矩阵加法被定义在两个相同大小的矩阵
两个m×n矩阵A和B的和,标记为A+B,一样是个m×n矩阵,其内的各元素为其相对应元素相加后的值
例如:
[ 1 3 5 7 9 1 ] + [ 2 2 4 0 6 8 ] = [ 1 + 2 3 + 2 5 + 4 7 + 0 9 + 6 1 + 8 ] = [ 3 5 9 7 15 9 ] \begin{bmatrix}1&3\\5&7\\9&1\end{bmatrix} + \begin{bmatrix}2&2\\4&0\\6&8\end{bmatrix} = \begin{bmatrix}1+2&3+2\\5+4&7+0\\9+6&1+8\end{bmatrix} = \begin{bmatrix}3&5\\9&7\\15&9\end{bmatrix} ⎣⎡159371⎦⎤+⎣⎡246208⎦⎤=⎣⎡1+25+49+63+27