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 import css实例代码
Jul 18 Javascript
jQuery选择器querySelector的使用指南
Jan 23 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 Javascript
AngularJS控制器controller正确的通信的方法
Jan 25 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
Jun 16 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
JS数组排序方法实例分析
Dec 16 Javascript
Vue组件tree实现树形菜单
Apr 13 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
Jan 02 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
详解Javascript实践中的命令模式
May 05 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文档更新介绍
2011/07/22 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python 制作糗事百科爬虫实例
2016/09/22 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
税务会计岗位职责
2014/02/18 职场文书
主题班会演讲稿
2014/05/22 职场文书
2014年机关后勤工作总结
2014/12/16 职场文书
佛光寺导游词
2015/02/10 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
主持人大赛开场白
2015/05/29 职场文书
聘任书格式及范文
2015/09/21 职场文书