matrixlib-js
Version:
MatrixLib.js is a JavaScript simple matrix calculation library.
329 lines (241 loc) • 10.5 kB
HTML
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="description" content="matrixlib.jsは、多次元配列の計算が可能な、JavaScriptの行列計算ライブラリです.">
<title>matrixlib.js- - JavaScriptの行列計算ライブラリ(多次元配列の計算が可能)</title>
</head>
<body>
<h1>matrixlib.js</h1>
<p>matrixlib.js は、多次元配列の計算が可能な、JavaScriptの行列計算ライブラリです.</p>
<p>シングルスレッド版の、matrixlib.js と、マルチスレッド対応版の、matrixlib-multithread.js があります.</p>
<p>ブラウザのJavaScriptコンソールを開いて試してください.</p>
<p>マルチスレッド対応版は、Promiseオブジェクトが返るので、煮るなり焼くなりしてください.</p>
<p>このHTMLのソースコードは、マルチスレッド版です.</p>
<ul>
<li><p><a href="https://github.com/webryone/matrixlib.js">GitHub</a></p></li>
<li><p><a href="https://npm.runkit.com/matrixlib-js">matrixlib-js を試す(シングルスレッド版)</a></p></li>
</ul>
<h2>サンプルコード</h2>
<pre>
<code>
/*
# matrixLibMultiThreadJs インスタンス
*/
const mt = matrixLibMultiThreadJs({
libUrl: `${window.location.protocol}//${window.location.hostname}${(() => {return window.location.port ? ':' + window.location.port : '';})()}${window.location.pathname}js/matrixlib.js`
});
(async () => {
let m1 = await mt.math.matrix.util.create(3, 3, 7);
let m2 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
let m3 = [m1, m2];
console.log('m1', m1);
console.log('m2', m2);
console.log('m3', m3);
let dot = await mt.math.dot(m1, m2);
console.log('dot', dot);
let plus = await mt.math.plus(m1, m2);
console.log('plus', plus);
let minus = await mt.math.minus(m1, m2);
console.log('minus', minus);
let multi = await mt.math.multi(m1, m2);
console.log('multi', multi);
let div = await mt.math.div(m1, m2);
console.log('div', div);
let more = await mt.math.more(m1, m2);
console.log('more', more);
let less = await mt.math.less(m1, m2);
console.log('less', less);
let moreEq = await mt.math.moreEq(m1, m2);
console.log('moreEq', moreEq);
let lessEq = await mt.math.lessEq(m1, m2);
console.log('lessEq', lessEq);
let equal = await mt.math.equal(m1, m2);
console.log('equal', equal);
let notEqual = await mt.math.notEqual(m1, m2);
console.log('notEqual', notEqual);
let boolToInt = await mt.math.boolToInt(more);
console.log('boolToInt', boolToInt);
let valToAnyVal = await mt.math.valToAnyVal(more, (x) => { return !x; });
console.log('valToAnyVal', valToAnyVal);
let valToAnyVal2 = await mt.math.valToAnyVal(more, (_more, _less, _idx, _arr) => { return !_more ? 0 : _less; }, less);
console.log('valToAnyVal2', valToAnyVal2);
let sum = await mt.math.sum(m2);
console.log('sum', sum);
let sumAxis0 = await mt.math.sum(m2, 0);
console.log('sumAxis0', sumAxis0);
let sumAxis1 = await mt.math.sum(m2, 1);
console.log('sumAxis1', sumAxis1);
let sumAxis2 = await mt.math.sum(m3, 2);
console.log('sumAxis2', sumAxis2);
let pow = await mt.math.pow(m1, 2);
console.log('pow', pow);
let exp = await mt.math.exp(m2);
console.log('exp', exp);
let log = await mt.math.log(m2);
console.log('log', log);
let max = await mt.math.max(m2);
console.log('max', max);
let maxAxis0 = await mt.math.max(m2, 0);
console.log('maxAxis0', maxAxis0);
let maxAxis1 = await mt.math.max(m2, 1);
console.log('maxAxis1', maxAxis1);
let maxAxis2 = await mt.math.max(m3, 2);
console.log('maxAxis2', maxAxis2);
let maximum = await mt.math.maximum(m1, m2);
console.log('maximum', maximum);
let maxIdx = await mt.math.maxIdx(m2);
console.log('maxIdx', maxIdx);
let maxIdxAxis0 = await mt.math.maxIdx(m2, 0);
console.log('maxIdxAxis0', maxIdxAxis0);
let maxIdxAxis1 = await mt.math.maxIdx(m2, 1);
console.log('maxIdxAxis1', maxIdxAxis1);
let maxIdxAxis2 = await mt.math.maxIdx(m3, 2);
console.log('maxIdxAxis2', maxIdxAxis2);
let matchCount = await mt.math.matchCount(m1, m2);
console.log('matchCount', matchCount);
let flatten = await mt.math.flatten(m2);
console.log('flatten', flatten);
console.log(
'shape',
mt.math.util.shape(m2)
);
console.log(
'rnorm',
mt.util.rnorm(1, 0.1)
);
console.log(
'create(arr)',
mt.math.arr.util.create(10, () => { return mt.util.rnorm(1, 0.1); })
);
console.log(
'create(matrix)',
mt.math.matrix.util.create(10, 5, () => { return mt.util.rnorm(1, 0.1); })
);
console.log(
'arange',
mt.math.arr.util.arange(-5, 5, 0.1, (x) => { return Math.round(x * Math.pow(10, 1)) / Math.pow(10, 1); })
);
console.log(
'colToRow(matrix)',
mt.math.matrix.util.colToRow(m1)
);
})();
</code>
</pre>
<script src="./js/matrixlib-multithread.js"></script>
<script>;
/*
# matrixLibMultiThreadJs インスタンス
*/
const mt = matrixLibMultiThreadJs({
libUrl: `${window.location.protocol}//${window.location.hostname}${(() => {return window.location.port ? ':' + window.location.port : '';})()}${window.location.pathname}js/matrixlib.js`
});
(async () => {
let m1 = await mt.math.matrix.util.create(3, 3, 7);
let m2 = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
let m3 = [m1, m2];
console.log('m1', m1);
console.log('m2', m2);
console.log('m3', m3);
let dot = await mt.math.dot(m1, m2);
console.log('dot', dot);
let plus = await mt.math.plus(m1, m2);
console.log('plus', plus);
let minus = await mt.math.minus(m1, m2);
console.log('minus', minus);
let multi = await mt.math.multi(m1, m2);
console.log('multi', multi);
let div = await mt.math.div(m1, m2);
console.log('div', div);
let more = await mt.math.more(m1, m2);
console.log('more', more);
let less = await mt.math.less(m1, m2);
console.log('less', less);
let moreEq = await mt.math.moreEq(m1, m2);
console.log('moreEq', moreEq);
let lessEq = await mt.math.lessEq(m1, m2);
console.log('lessEq', lessEq);
let equal = await mt.math.equal(m1, m2);
console.log('equal', equal);
let notEqual = await mt.math.notEqual(m1, m2);
console.log('notEqual', notEqual);
let boolToInt = await mt.math.boolToInt(more);
console.log('boolToInt', boolToInt);
let valToAnyVal = await mt.math.valToAnyVal(more, (x) => { return !x; });
console.log('valToAnyVal', valToAnyVal);
let valToAnyVal2 = await mt.math.valToAnyVal(more, (_more, _less, _idx, _arr) => { return !_more ? 0 : _less; }, less);
console.log('valToAnyVal2', valToAnyVal2);
let sum = await mt.math.sum(m2);
console.log('sum', sum);
let sumAxis0 = await mt.math.sum(m2, 0);
console.log('sumAxis0', sumAxis0);
let sumAxis1 = await mt.math.sum(m2, 1);
console.log('sumAxis1', sumAxis1);
let sumAxis2 = await mt.math.sum(m3, 2);
console.log('sumAxis2', sumAxis2);
let pow = await mt.math.pow(m1, 2);
console.log('pow', pow);
let exp = await mt.math.exp(m2);
console.log('exp', exp);
let log = await mt.math.log(m2);
console.log('log', log);
let max = await mt.math.max(m2);
console.log('max', max);
let maxAxis0 = await mt.math.max(m2, 0);
console.log('maxAxis0', maxAxis0);
let maxAxis1 = await mt.math.max(m2, 1);
console.log('maxAxis1', maxAxis1);
let maxAxis2 = await mt.math.max(m3, 2);
console.log('maxAxis2', maxAxis2);
let maximum = await mt.math.maximum(m1, m2);
console.log('maximum', maximum);
let maxIdx = await mt.math.maxIdx(m2);
console.log('maxIdx', maxIdx);
let maxIdxAxis0 = await mt.math.maxIdx(m2, 0);
console.log('maxIdxAxis0', maxIdxAxis0);
let maxIdxAxis1 = await mt.math.maxIdx(m2, 1);
console.log('maxIdxAxis1', maxIdxAxis1);
let maxIdxAxis2 = await mt.math.maxIdx(m3, 2);
console.log('maxIdxAxis2', maxIdxAxis2);
let matchCount = await mt.math.matchCount(m1, m2);
console.log('matchCount', matchCount);
let flatten = await mt.math.flatten(m2);
console.log('flatten', flatten);
console.log(
'shape',
mt.math.util.shape(m2)
);
console.log(
'rnorm',
mt.util.rnorm(1, 0.1)
);
console.log(
'create(arr)',
mt.math.arr.util.create(10, () => { return mt.util.rnorm(1, 0.1); })
);
console.log(
'create(matrix)',
mt.math.matrix.util.create(10, 5, () => { return mt.util.rnorm(1, 0.1); })
);
console.log(
'arange',
mt.math.arr.util.arange(-5, 5, 0.1, (x) => { return Math.round(x * Math.pow(10, 1)) / Math.pow(10, 1); })
);
console.log(
'colToRow(matrix)',
mt.math.matrix.util.colToRow(m1)
);
})();
</script>
</body>
</html>