1 | var B = require("./base");
|
2 | var N = require("numeric");
|
3 | var M = {};
|
4 |
|
5 | M.tr = N.transpose;
|
6 | M.str = N.prettyPrint;
|
7 | M.rows=function(m) { return m.length; }
|
8 | M.cols=function(m) { return m[0].length; }
|
9 | M.row =function(m,i) { return m[i]; }
|
10 | M.col =function(m,j) {
|
11 | var cols = m.cols();
|
12 | var c = M.newV(cols);
|
13 | for (var i=0;i<cols;i++) {
|
14 | c[i] = m[i][j];
|
15 | }
|
16 | return c;
|
17 | }
|
18 |
|
19 | M.newV = function(n, value) {
|
20 | return M.rep([n], value||0);
|
21 | }
|
22 |
|
23 | M.newM = function(rows, cols, value) {
|
24 | return M.rep([rows, cols], value||0);
|
25 | }
|
26 |
|
27 | M.randomV = function(n, a, b) {
|
28 | return M.random([n]).mul(b-a).add(a);
|
29 | }
|
30 |
|
31 | M.randomM = function(rows, cols, a, b) {
|
32 | return M.random([rows, cols]).mul(b-a).add(a);
|
33 | }
|
34 |
|
35 | M.rowSum = function(m) {
|
36 | var rows = M.rows(m);
|
37 | var s=M.newV(rows, 0);
|
38 | for (var i=0; i<rows; i++) {
|
39 | s[i] = m[i].sumM();
|
40 | }
|
41 | return s;
|
42 | }
|
43 |
|
44 | M.colSum = function(m) {
|
45 | var mt = M.tr(m);
|
46 | return M.rowSum(mt);
|
47 | }
|
48 |
|
49 | M.rowMean = function(m) {
|
50 | return M.rowSum(m).div(m.cols());
|
51 | }
|
52 |
|
53 | M.colMean = function(m) {
|
54 | return M.colSum(m).div(m.rows());
|
55 | }
|
56 |
|
57 | M.addMV = function(m,v) {
|
58 | var result = [];
|
59 | for(var i=0;i<m.length;i++) {
|
60 | result.push(m[i].add(v));
|
61 | }
|
62 | return result;
|
63 | }
|
64 |
|
65 | M.mapM = function(m, f) {
|
66 | var fm = M.clone(m);
|
67 | var rows = M.rows(m), cols=M.cols(m);
|
68 | for(i=0;i<rows;i++) {
|
69 | for(j=0;j<cols;j++)
|
70 | fm[i][j]=f(m[i][j]);
|
71 | }
|
72 | return fm;
|
73 | }
|
74 |
|
75 | M.mapMM = function(m1,m2,f) {
|
76 | var fm = M.clone(m1);
|
77 | var rows = m1.rows(), cols=m1.cols();
|
78 | for(i=0;i<rows;i++) {
|
79 | for(j=0;j<cols;j++)
|
80 | fm[i][j]=f(m1[i][j],m2[i][j]);
|
81 | }
|
82 | return fm;
|
83 | }
|
84 |
|
85 | M.flatM=function(m) {
|
86 | var a=[];
|
87 | var ai = 0;
|
88 | for (var i=0; i<m.length;i++)
|
89 | for (var j=0; j<m[i].length; j++)
|
90 | a[ai++] = m[i][j];
|
91 | return a;
|
92 | }
|
93 |
|
94 | M.eigR=function(m) {
|
95 | var E = M.eig(m);
|
96 | return {lambda:E.lambda.x, E:E.E.x};
|
97 | }
|
98 |
|
99 | B.mix(M, N);
|
100 |
|
101 | module.exports = M; |
\ | No newline at end of file |