JS实现简单的二维矩阵乘积运算


Posted in Javascript onJanuary 26, 2016

本文实例讲述了JS实现简单的二维矩阵乘积运算方法。分享给大家供大家参考,具体如下:

Console控制台截图如下:

JS实现简单的二维矩阵乘积运算

(上图为输出结果直接上代码了(A矩阵可以乘以B矩阵的前提是A矩阵的列数等于B矩阵的行数)

<!DOCTYPE html>
<html>
  <head>
    <title>demo</title>
  </head>
  <body>
  </body>
  <script type="text/javascript">
    function log(msg) {
      console.log(msg);
    }
    /**
    * 可视化的打印出矩阵的数据
    */
    function printMatrixData(data) {
      console.log(data);
      if(!data) {
        return;
      }
      var numberSize = 5;
      for(var i=0, len=data.length; i<len; i++) {
        var row = data[i];
        var rowLog = "(";
        for(var j=0, jLen=row.length; j<jLen; j++) {
          rowLog += row[j];
          // 补齐空格
          rowLog += indent(numberSize - (row[j]+"").length);
        }
        rowLog+=")";
        console.log(rowLog);
      }
    }
    /**
    * 拼接指定长度的空格
    */
    function indent(length) {
      var empty = "";
      for(var i=0; i<length; i++) {
        empty += " ";
      }
      return empty;
    }
    /**
    * 矩阵原型
    */
    function Matrix(data) {
      // 这里必须传一个二维数组,最好严格检验一下
      if(typeof data !== "object" || typeof data.length === "undefined" || !data) {
        throw new Error("data's type is error");
      }
      this.data = data;
      this.cols = data.length;
    }
    var M = {
      findByLocation: function(data, xIndex, yIndex) {
        if(data && data[xIndex]) {
          return data[xIndex][yIndex];
        }
      },
      // 矩阵乘积
      multiply: function(m, n) {
        if(!m instanceof Matrix && !n instanceof Matrix) {
          throw new Error("data's type is error");
        }
        var mData = m.data;
        var nData = n.data;
        if(mData.length == 0 || nData.length == 0) {
          return 0;
        }
        if(mData[0].length != nData.length) {
          throw new Error("the two martrix data is not allowed to dot");
        }
        var result = [];
        for(var i=0, len=mData.length; i<len; i++) {
          var mRow = mData[i];
          result[i] = [];
          for(var j=0, jLen=mRow.length; j<jLen; j++) {
            var resultRowCol = 0;
            // 如果n矩阵没有足够的列数相乘,转入m矩阵下一行
            if(typeof this.findByLocation(nData, 0, j) === "undefined") {
              break;
            }
            for(var k=0, kLen=jLen; k<kLen; k++) {
              resultRowCol += mRow[k]*this.findByLocation(nData, k, j);
            }
            result[i][j] = resultRowCol;
          }
        }
        return result;
      }
    };
    var m = new Matrix([[2, -1], [-2, 1], [-1, 2]]);
    var n = new Matrix([[4, -3], [3, 5]]);
    var result = M.multiply(m, n);
    printMatrixData(result);
    var m2 = new Matrix([[2, 3, 1], [5, 2, 4], [-3, 2, 0]]);
    var n2 = new Matrix([[11], [5], [8]]);
    var result2 = M.multiply(m2, n2);
    printMatrixData(result2);
  </script>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 事件的一些重要说明
Oct 25 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
Apr 16 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
javascript面向对象编程代码
Dec 19 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
Nov 15 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
JS简单获得节点元素的方法示例
Feb 10 Javascript
使用post方法实现json往返传输数据的方法
Mar 30 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 Javascript
探究Javascript模板引擎mustache.js使用方法
Jan 26 #Javascript
jQuery Validation Plugin验证插件手动验证
Jan 26 #Javascript
一篇文章掌握RequireJS常用知识
Jan 26 #Javascript
JS正则表达式比较常见用法
Jan 26 #Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
Jan 26 #Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 #Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 #Javascript
You might like
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
JavaScript变量Dom对象的所有属性
2020/04/30 Javascript
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python友情链接检查方法
2015/07/08 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
python模块之re正则表达式详解
2017/02/03 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
Python FFT合成波形的实例
2019/12/04 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Python如何执行系统命令
2020/09/23 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
Java语言程序设计测试题选择题部分
2014/04/03 面试题
银行职员思想汇报
2013/12/31 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
大专护理专业自荐信
2015/03/25 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python
Django框架模板用法详解
2022/06/10 Python