搜索
查看: 2453|回复: 0

[扩展库] 一个简单的矩阵乘法扩展库

[复制链接]

2

主题

4

帖子

26

积分

新手入门

Rank: 1

积分
26
发表于 2018-6-15 17:59:12 | 显示全部楼层 |阅读模式
源码:
  1. namespace matrix
  2. import console;
  3. function log(msg) {
  4.   console.log(msg);
  5. }

  6. /**
  7. * 可视化的打印出矩阵的数据
  8. **/

  9. function printMatrixData(data) {
  10.   //console.log(#data);
  11.   if(!data) {
  12.     return;
  13.   }
  14.   var numberSize = 5;
  15.   for(i=1; #data; 1) {
  16.     var row = data[ i ];
  17.     var rowLog = "[";   
  18.     for(j=1; #row; 1) {
  19.       rowLog ++= row[j];
  20.       // 补齐空格
  21.       rowLog ++= indent(numberSize - #(row[j]++""));
  22.     }
  23.     rowLog++="]";
  24.     log(rowLog);
  25.   }
  26.   log('-----------------')
  27. }

  28. /*
  29. * 拼接指定长度的空格
  30. */
  31. function indent(length) {
  32.   var empty = "";
  33.   for(i=1; length; 1) {
  34.     empty ++= " ";
  35.   }
  36.   return empty;
  37. }
  38. /*
  39. * 矩阵原型
  40. */
  41. class Matrix{
  42.   // 这里必须传一个二维数组,最好严格检验一下
  43.   ctor(data) {
  44.           //..console.print(#data)
  45.           if(type(data) != type.table || type(#data) == type.null || !data) {
  46.                  
  47.                     error("The data's type is error");
  48.           }
  49.          
  50.           this.data = data;
  51.           this.rows = #data;
  52.   
  53.   }
  54.   typename="matrix";
  55. }

  56. //var M = {
  57.   findByLocation= function(data, xIndex, yIndex) {
  58.     if(data && data[xIndex]) {
  59.       return data[xIndex][yIndex];
  60.     }
  61.   }
  62.   // 矩阵乘积

  63.   multiply= function(m, n) {
  64.     if(m.typename!="matrix" or n.typename !="matrix") {
  65.       error("data's type is error");
  66.     }
  67.     var mData = m.data;
  68.     var nData = n.data;
  69.     if(#mData == 0 || #nData == 0) {
  70.       return 0;
  71.     }
  72.     if(#mData[1] != #nData) {
  73.       error("the two martrix data is not allowed to dot");
  74.     }
  75.     var result = {};
  76.     for(i=1;#mData; 1) {
  77.       var mRow = mData[ i ];
  78.       result[ i ] = {};
  79.       for(j=1;#mRow; 1) {
  80.         var resultRowCol = 0;
  81.         // 如果n矩阵没有足够的列数相乘,转入m矩阵下一行
  82.         if(type(owner.findByLocation(nData, 1, j)) == type.null) {
  83.           break;
  84.         }
  85.         for(k=1; #mRow; 1) {
  86.           resultRowCol += mRow[k] *owner.findByLocation(nData, k, j);
  87.         }
  88.         result[ i ][j] = resultRowCol;
  89.       }
  90.     }
  91.     return result;
  92.   }
  93. //};
复制代码


使用:
  1. import console
  2. import matrix
  3. var m = matrix.Matrix({{2; -1}; {-2; 1}; {-1; 2}});
  4. //console.log(m.typename)
  5. var n = matrix.Matrix({{4; -3}; {3; 5}});
  6. var result = matrix.multiply(m, n);
  7. console.log("Here is the result:")
  8. matrix.printMatrixData(result);

  9. console.pause(true);
复制代码

结果:
  1. Here is the result:
  2. [5    -11  ]
  3. [-5   11   ]
  4. [2    13   ]
  5. -----------------
  6. 请按任意键继续 ...
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-9-19 08:46 , Processed in 0.046875 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表