mathjs 11.10.1 → 11.11.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +21 -2
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +4 -4
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesCorr.generated.js +36 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesPrintTransform.generated.js +24 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesCorr.generated.js +36 -0
- package/lib/cjs/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
- package/lib/cjs/entry/dependenciesNumber.generated.js +7 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +48 -35
- package/lib/cjs/entry/impureFunctionsNumber.generated.js +17 -16
- package/lib/cjs/entry/pureFunctionsAny.generated.js +101 -76
- package/lib/cjs/entry/pureFunctionsNumber.generated.js +46 -28
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/statistics/corr.js +15 -0
- package/lib/cjs/expression/embeddedDocs/function/utils/print.js +1 -1
- package/lib/cjs/expression/node/FunctionNode.js +3 -1
- package/lib/cjs/expression/transform/print.transform.js +47 -0
- package/lib/cjs/expression/transform/quantileSeq.transform.js +27 -5
- package/lib/cjs/factoriesAny.js +15 -1
- package/lib/cjs/factoriesNumber.js +10 -4
- package/lib/cjs/function/algebra/simplify/util.js +2 -2
- package/lib/cjs/function/arithmetic/gcd.js +40 -4
- package/lib/cjs/function/arithmetic/mod.js +32 -3
- package/lib/cjs/function/numeric/solveODE.js +2 -2
- package/lib/cjs/function/statistics/corr.js +85 -0
- package/lib/cjs/function/statistics/quantileSeq.js +90 -167
- package/lib/cjs/function/string/print.js +5 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/plain/number/arithmetic.js +4 -12
- package/lib/cjs/type/unit/Unit.js +2 -2
- package/lib/cjs/utils/print.js +8 -0
- package/lib/cjs/utils/snapshot.js +8 -8
- package/lib/cjs/version.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesCorr.generated.js +28 -0
- package/lib/esm/entry/dependenciesAny/dependenciesGcd.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesMod.generated.js +4 -0
- package/lib/esm/entry/dependenciesAny/dependenciesPrintTransform.generated.js +16 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeq.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny/dependenciesQuantileSeqTransform.generated.js +12 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesCorr.generated.js +28 -0
- package/lib/esm/entry/dependenciesNumber/dependenciesQuantileSeq.generated.js +10 -0
- package/lib/esm/entry/dependenciesNumber.generated.js +1 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +49 -36
- package/lib/esm/entry/impureFunctionsNumber.generated.js +19 -18
- package/lib/esm/entry/pureFunctionsAny.generated.js +85 -61
- package/lib/esm/entry/pureFunctionsNumber.generated.js +39 -22
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/statistics/corr.js +8 -0
- package/lib/esm/expression/embeddedDocs/function/utils/print.js +1 -1
- package/lib/esm/expression/node/FunctionNode.js +3 -1
- package/lib/esm/expression/transform/print.transform.js +42 -0
- package/lib/esm/expression/transform/quantileSeq.transform.js +23 -5
- package/lib/esm/factoriesAny.js +3 -1
- package/lib/esm/factoriesNumber.js +1 -0
- package/lib/esm/function/algebra/simplify/util.js +2 -2
- package/lib/esm/function/arithmetic/gcd.js +40 -4
- package/lib/esm/function/arithmetic/mod.js +32 -3
- package/lib/esm/function/numeric/solveODE.js +2 -2
- package/lib/esm/function/statistics/corr.js +74 -0
- package/lib/esm/function/statistics/quantileSeq.js +82 -165
- package/lib/esm/function/string/print.js +5 -1
- package/lib/esm/plain/number/arithmetic.js +4 -12
- package/lib/esm/type/unit/Unit.js +2 -2
- package/lib/esm/utils/print.js +1 -0
- package/lib/esm/utils/snapshot.js +2 -2
- package/lib/esm/version.js +1 -1
- package/package.json +21 -21
- package/types/index.d.ts +8 -0
package/lib/cjs/factoriesAny.js
CHANGED
@@ -375,6 +375,12 @@ Object.defineProperty(exports, "createConstantNode", {
|
|
375
375
|
return _ConstantNode.createConstantNode;
|
376
376
|
}
|
377
377
|
});
|
378
|
+
Object.defineProperty(exports, "createCorr", {
|
379
|
+
enumerable: true,
|
380
|
+
get: function get() {
|
381
|
+
return _corr.createCorr;
|
382
|
+
}
|
383
|
+
});
|
378
384
|
Object.defineProperty(exports, "createCos", {
|
379
385
|
enumerable: true,
|
380
386
|
get: function get() {
|
@@ -1461,6 +1467,12 @@ Object.defineProperty(exports, "createPrint", {
|
|
1461
1467
|
return _print.createPrint;
|
1462
1468
|
}
|
1463
1469
|
});
|
1470
|
+
Object.defineProperty(exports, "createPrintTransform", {
|
1471
|
+
enumerable: true,
|
1472
|
+
get: function get() {
|
1473
|
+
return _printTransform.createPrintTransform;
|
1474
|
+
}
|
1475
|
+
});
|
1464
1476
|
Object.defineProperty(exports, "createProd", {
|
1465
1477
|
enumerable: true,
|
1466
1478
|
get: function get() {
|
@@ -2366,6 +2378,7 @@ var _mad = require("./function/statistics/mad.js");
|
|
2366
2378
|
var _variance = require("./function/statistics/variance.js");
|
2367
2379
|
var _quantileSeq = require("./function/statistics/quantileSeq.js");
|
2368
2380
|
var _std = require("./function/statistics/std.js");
|
2381
|
+
var _corr = require("./function/statistics/corr.js");
|
2369
2382
|
var _combinations = require("./function/probability/combinations.js");
|
2370
2383
|
var _combinationsWithRep = require("./function/probability/combinationsWithRep.js");
|
2371
2384
|
var _gamma = require("./function/probability/gamma.js");
|
@@ -2413,4 +2426,5 @@ var _stdTransform = require("./expression/transform/std.transform.js");
|
|
2413
2426
|
var _sumTransform = require("./expression/transform/sum.transform.js");
|
2414
2427
|
var _quantileSeqTransform = require("./expression/transform/quantileSeq.transform.js");
|
2415
2428
|
var _cumsumTransform = require("./expression/transform/cumsum.transform.js");
|
2416
|
-
var _varianceTransform = require("./expression/transform/variance.transform.js");
|
2429
|
+
var _varianceTransform = require("./expression/transform/variance.transform.js");
|
2430
|
+
var _printTransform = require("./expression/transform/print.transform.js");
|
@@ -136,6 +136,12 @@ Object.defineProperty(exports, "createConstantNode", {
|
|
136
136
|
return _ConstantNode.createConstantNode;
|
137
137
|
}
|
138
138
|
});
|
139
|
+
Object.defineProperty(exports, "createCorr", {
|
140
|
+
enumerable: true,
|
141
|
+
get: function get() {
|
142
|
+
return _corr.createCorr;
|
143
|
+
}
|
144
|
+
});
|
139
145
|
exports.createCube = exports.createCsch = exports.createCsc = exports.createCoth = exports.createCot = exports.createCosh = exports.createCos = void 0;
|
140
146
|
Object.defineProperty(exports, "createCumSum", {
|
141
147
|
enumerable: true,
|
@@ -354,8 +360,8 @@ Object.defineProperty(exports, "createLargerEq", {
|
|
354
360
|
return _largerEq.createLargerEqNumber;
|
355
361
|
}
|
356
362
|
});
|
357
|
-
exports.
|
358
|
-
exports.createLog2 = exports.createLog1p = exports.createLog10 = exports.createLog = exports.createLgamma = void 0;
|
363
|
+
exports.createLcm = void 0;
|
364
|
+
exports.createLog2 = exports.createLog1p = exports.createLog10 = exports.createLog = exports.createLgamma = exports.createLeftShift = void 0;
|
359
365
|
Object.defineProperty(exports, "createMad", {
|
360
366
|
enumerable: true,
|
361
367
|
get: function get() {
|
@@ -777,8 +783,7 @@ Object.defineProperty(exports, "createVersion", {
|
|
777
783
|
return _constants.createVersion;
|
778
784
|
}
|
779
785
|
});
|
780
|
-
exports.createXgcd = void 0;
|
781
|
-
exports.createXor = void 0;
|
786
|
+
exports.createXor = exports.createXgcd = void 0;
|
782
787
|
Object.defineProperty(exports, "createZeta", {
|
783
788
|
enumerable: true,
|
784
789
|
get: function get() {
|
@@ -874,6 +879,7 @@ var _mad = require("./function/statistics/mad.js");
|
|
874
879
|
var _variance = require("./function/statistics/variance.js");
|
875
880
|
var _quantileSeq = require("./function/statistics/quantileSeq.js");
|
876
881
|
var _std = require("./function/statistics/std.js");
|
882
|
+
var _corr = require("./function/statistics/corr.js");
|
877
883
|
var _format = require("./function/string/format.js");
|
878
884
|
var _print = require("./function/string/print.js");
|
879
885
|
var _applyTransform = require("./expression/transform/apply.transform.js");
|
@@ -9,8 +9,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
9
9
|
var _is = require("../../../utils/is.js");
|
10
10
|
var _factory = require("../../../utils/factory.js");
|
11
11
|
var _object = require("../../../utils/object.js");
|
12
|
-
function ownKeys(
|
13
|
-
function _objectSpread(
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
14
14
|
var name = 'simplifyUtil';
|
15
15
|
var dependencies = ['FunctionNode', 'OperatorNode', 'SymbolNode'];
|
16
16
|
var createUtil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
@@ -7,15 +7,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
exports.createGcd = void 0;
|
8
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
9
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
10
|
+
var _number = require("../../utils/number.js");
|
10
11
|
var _factory = require("../../utils/factory.js");
|
12
|
+
var _mod = require("./mod.js");
|
11
13
|
var _matAlgo01xDSid = require("../../type/matrix/utils/matAlgo01xDSid.js");
|
12
14
|
var _matAlgo04xSidSid = require("../../type/matrix/utils/matAlgo04xSidSid.js");
|
13
15
|
var _matAlgo10xSids = require("../../type/matrix/utils/matAlgo10xSids.js");
|
14
16
|
var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
|
15
|
-
var _index = require("../../plain/number/index.js");
|
16
17
|
var _ArgumentsError = require("../../error/ArgumentsError.js");
|
17
18
|
var name = 'gcd';
|
18
|
-
var dependencies = ['typed', 'matrix', 'equalScalar', 'BigNumber', 'DenseMatrix', 'concat'];
|
19
|
+
var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'BigNumber', 'DenseMatrix', 'concat'];
|
19
20
|
var gcdTypes = 'number | BigNumber | Fraction | Matrix | Array';
|
20
21
|
var gcdManyTypesSignature = "".concat(gcdTypes, ", ").concat(gcdTypes, ", ...").concat(gcdTypes);
|
21
22
|
function is1d(array) {
|
@@ -27,10 +28,23 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
27
28
|
var _typed;
|
28
29
|
var typed = _ref.typed,
|
29
30
|
matrix = _ref.matrix,
|
31
|
+
config = _ref.config,
|
32
|
+
round = _ref.round,
|
30
33
|
equalScalar = _ref.equalScalar,
|
34
|
+
zeros = _ref.zeros,
|
31
35
|
BigNumber = _ref.BigNumber,
|
32
36
|
DenseMatrix = _ref.DenseMatrix,
|
33
37
|
concat = _ref.concat;
|
38
|
+
var mod = (0, _mod.createMod)({
|
39
|
+
typed: typed,
|
40
|
+
config: config,
|
41
|
+
round: round,
|
42
|
+
matrix: matrix,
|
43
|
+
equalScalar: equalScalar,
|
44
|
+
zeros: zeros,
|
45
|
+
DenseMatrix: DenseMatrix,
|
46
|
+
concat: concat
|
47
|
+
});
|
34
48
|
var matAlgo01xDSid = (0, _matAlgo01xDSid.createMatAlgo01xDSid)({
|
35
49
|
typed: typed
|
36
50
|
});
|
@@ -74,7 +88,7 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
74
88
|
* @return {number | BigNumber | Fraction | Array | Matrix} The greatest common divisor
|
75
89
|
*/
|
76
90
|
return typed(name, {
|
77
|
-
'number, number':
|
91
|
+
'number, number': _gcdNumber,
|
78
92
|
'BigNumber, BigNumber': _gcdBigNumber,
|
79
93
|
'Fraction, Fraction': function FractionFraction(x, y) {
|
80
94
|
return x.gcd(y);
|
@@ -107,6 +121,28 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
107
121
|
};
|
108
122
|
})), _typed));
|
109
123
|
|
124
|
+
/**
|
125
|
+
* Calculate gcd for numbers
|
126
|
+
* @param {number} a
|
127
|
+
* @param {number} b
|
128
|
+
* @returns {number} Returns the greatest common denominator of a and b
|
129
|
+
* @private
|
130
|
+
*/
|
131
|
+
function _gcdNumber(a, b) {
|
132
|
+
if (!(0, _number.isInteger)(a) || !(0, _number.isInteger)(b)) {
|
133
|
+
throw new Error('Parameters in function gcd must be integer numbers');
|
134
|
+
}
|
135
|
+
|
136
|
+
// https://en.wikipedia.org/wiki/Euclidean_algorithm
|
137
|
+
var r;
|
138
|
+
while (b !== 0) {
|
139
|
+
r = mod(a, b);
|
140
|
+
a = b;
|
141
|
+
b = r;
|
142
|
+
}
|
143
|
+
return a < 0 ? -a : a;
|
144
|
+
}
|
145
|
+
|
110
146
|
/**
|
111
147
|
* Calculate gcd for BigNumbers
|
112
148
|
* @param {BigNumber} a
|
@@ -122,7 +158,7 @@ var createGcd = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
122
158
|
// https://en.wikipedia.org/wiki/Euclidean_algorithm
|
123
159
|
var zero = new BigNumber(0);
|
124
160
|
while (!b.isZero()) {
|
125
|
-
var r =
|
161
|
+
var r = mod(a, b);
|
126
162
|
a = b;
|
127
163
|
b = r;
|
128
164
|
}
|
@@ -5,21 +5,33 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.createMod = void 0;
|
7
7
|
var _factory = require("../../utils/factory.js");
|
8
|
+
var _floor = require("./floor.js");
|
8
9
|
var _matAlgo02xDS = require("../../type/matrix/utils/matAlgo02xDS0.js");
|
9
10
|
var _matAlgo03xDSf = require("../../type/matrix/utils/matAlgo03xDSf.js");
|
10
11
|
var _matAlgo05xSfSf = require("../../type/matrix/utils/matAlgo05xSfSf.js");
|
11
12
|
var _matAlgo11xS0s = require("../../type/matrix/utils/matAlgo11xS0s.js");
|
12
13
|
var _matAlgo12xSfs = require("../../type/matrix/utils/matAlgo12xSfs.js");
|
13
|
-
var _index = require("../../plain/number/index.js");
|
14
14
|
var _matrixAlgorithmSuite = require("../../type/matrix/utils/matrixAlgorithmSuite.js");
|
15
15
|
var name = 'mod';
|
16
|
-
var dependencies = ['typed', 'matrix', 'equalScalar', 'DenseMatrix', 'concat'];
|
16
|
+
var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar', 'zeros', 'DenseMatrix', 'concat'];
|
17
17
|
var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
18
18
|
var typed = _ref.typed,
|
19
|
+
config = _ref.config,
|
20
|
+
round = _ref.round,
|
19
21
|
matrix = _ref.matrix,
|
20
22
|
equalScalar = _ref.equalScalar,
|
23
|
+
zeros = _ref.zeros,
|
21
24
|
DenseMatrix = _ref.DenseMatrix,
|
22
25
|
concat = _ref.concat;
|
26
|
+
var floor = (0, _floor.createFloor)({
|
27
|
+
typed: typed,
|
28
|
+
config: config,
|
29
|
+
round: round,
|
30
|
+
matrix: matrix,
|
31
|
+
equalScalar: equalScalar,
|
32
|
+
zeros: zeros,
|
33
|
+
DenseMatrix: DenseMatrix
|
34
|
+
});
|
23
35
|
var matAlgo02xDS0 = (0, _matAlgo02xDS.createMatAlgo02xDS0)({
|
24
36
|
typed: typed,
|
25
37
|
equalScalar: equalScalar
|
@@ -81,7 +93,7 @@ var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
81
93
|
* @return {number | BigNumber | Fraction | Array | Matrix} Returns the remainder of `x` divided by `y`.
|
82
94
|
*/
|
83
95
|
return typed(name, {
|
84
|
-
'number, number':
|
96
|
+
'number, number': _modNumber,
|
85
97
|
'BigNumber, BigNumber': function BigNumberBigNumber(x, y) {
|
86
98
|
if (y.isNeg()) {
|
87
99
|
throw new Error('Cannot calculate mod for a negative divisor');
|
@@ -102,5 +114,22 @@ var createMod = /* #__PURE__ */(0, _factory.factory)(name, dependencies, functio
|
|
102
114
|
Ss: matAlgo11xS0s,
|
103
115
|
sS: matAlgo12xSfs
|
104
116
|
}));
|
117
|
+
|
118
|
+
/**
|
119
|
+
* Calculate the modulus of two numbers
|
120
|
+
* @param {number} x
|
121
|
+
* @param {number} y
|
122
|
+
* @returns {number} res
|
123
|
+
* @private
|
124
|
+
*/
|
125
|
+
function _modNumber(x, y) {
|
126
|
+
// We don't use JavaScript's % operator here as this doesn't work
|
127
|
+
// correctly for x < 0 and x === 0
|
128
|
+
// see https://en.wikipedia.org/wiki/Modulo_operation
|
129
|
+
|
130
|
+
// We use mathjs floor to handle errors associated with
|
131
|
+
// precision float approximation
|
132
|
+
return y === 0 ? x : x - y * floor(x / y);
|
133
|
+
}
|
105
134
|
});
|
106
135
|
exports.createMod = createMod;
|
@@ -10,8 +10,8 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
11
11
|
var _is = require("../../utils/is.js");
|
12
12
|
var _factory = require("../../utils/factory.js");
|
13
|
-
function ownKeys(
|
14
|
-
function _objectSpread(
|
13
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
14
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
15
15
|
var name = 'solveODE';
|
16
16
|
var dependencies = ['typed', 'add', 'subtract', 'multiply', 'divide', 'max', 'map', 'abs', 'isPositive', 'isNegative', 'larger', 'smaller', 'matrix', 'bignumber', 'unaryMinus'];
|
17
17
|
var createSolveODE = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
@@ -0,0 +1,85 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.createCorr = void 0;
|
7
|
+
var _factory = require("../../utils/factory.js");
|
8
|
+
var name = 'corr';
|
9
|
+
var dependencies = ['typed', 'matrix', 'mean', 'sqrt', 'sum', 'add', 'subtract', 'multiply', 'pow', 'divide'];
|
10
|
+
var createCorr = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
11
|
+
var typed = _ref.typed,
|
12
|
+
matrix = _ref.matrix,
|
13
|
+
sqrt = _ref.sqrt,
|
14
|
+
sum = _ref.sum,
|
15
|
+
add = _ref.add,
|
16
|
+
subtract = _ref.subtract,
|
17
|
+
multiply = _ref.multiply,
|
18
|
+
pow = _ref.pow,
|
19
|
+
divide = _ref.divide;
|
20
|
+
/**
|
21
|
+
* Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.
|
22
|
+
*
|
23
|
+
* Syntax:
|
24
|
+
*
|
25
|
+
* math.corr(A, B)
|
26
|
+
*
|
27
|
+
* Examples:
|
28
|
+
*
|
29
|
+
* math.corr([1, 2, 3, 4, 5], [4, 5, 6, 7, 8]) // returns 1
|
30
|
+
* math.corr([1, 2.2, 3, 4.8, 5], [4, 5.3, 6.6, 7, 8]) // returns 0.9569941688503644
|
31
|
+
* math.corr(math.matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), math.matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]])) // returns DenseMatrix [0.9569941688503644, 1]
|
32
|
+
*
|
33
|
+
* See also:
|
34
|
+
*
|
35
|
+
* median, mean, min, max, sum, prod, std, variance
|
36
|
+
*
|
37
|
+
* @param {Array | Matrix} A The first array or matrix to compute correlation coefficient
|
38
|
+
* @param {Array | Matrix} B The second array or matrix to compute correlation coefficient
|
39
|
+
* @return {*} The correlation coefficient
|
40
|
+
*/
|
41
|
+
return typed(name, {
|
42
|
+
'Array, Array': function ArrayArray(A, B) {
|
43
|
+
return _corr(A, B);
|
44
|
+
},
|
45
|
+
'Matrix, Matrix': function MatrixMatrix(xMatrix, yMatrix) {
|
46
|
+
return matrix(_corr(xMatrix.toArray(), yMatrix.toArray()));
|
47
|
+
}
|
48
|
+
});
|
49
|
+
/**
|
50
|
+
* Calculate the correlation coefficient between two arrays or matrices.
|
51
|
+
* @param {Array | Matrix} A
|
52
|
+
* @param {Array | Matrix} B
|
53
|
+
* @return {*} correlation coefficient
|
54
|
+
* @private
|
55
|
+
*/
|
56
|
+
function _corr(A, B) {
|
57
|
+
if (Array.isArray(A[0]) && Array.isArray(B[0])) {
|
58
|
+
var correlations = [];
|
59
|
+
for (var i = 0; i < A.length; i++) {
|
60
|
+
correlations.push(correlation(A[i], B[i]));
|
61
|
+
}
|
62
|
+
return correlations;
|
63
|
+
} else {
|
64
|
+
return correlation(A, B);
|
65
|
+
}
|
66
|
+
}
|
67
|
+
function correlation(A, B) {
|
68
|
+
var n = A.length;
|
69
|
+
var sumX = sum(A);
|
70
|
+
var sumY = sum(B);
|
71
|
+
var sumXY = A.reduce(function (acc, x, index) {
|
72
|
+
return add(acc, multiply(x, B[index]));
|
73
|
+
}, 0);
|
74
|
+
var sumXSquare = sum(A.map(function (x) {
|
75
|
+
return pow(x, 2);
|
76
|
+
}));
|
77
|
+
var sumYSquare = sum(B.map(function (y) {
|
78
|
+
return pow(y, 2);
|
79
|
+
}));
|
80
|
+
var numerator = subtract(multiply(n, sumXY), multiply(sumX, sumY));
|
81
|
+
var denominator = sqrt(multiply(subtract(multiply(n, sumXSquare), pow(sumX, 2)), subtract(multiply(n, sumYSquare), pow(sumY, 2))));
|
82
|
+
return divide(numerator, denominator);
|
83
|
+
}
|
84
|
+
});
|
85
|
+
exports.createCorr = createCorr;
|
@@ -9,14 +9,25 @@ var _array = require("../../utils/array.js");
|
|
9
9
|
var _factory = require("../../utils/factory.js");
|
10
10
|
var _apply = require("../matrix/apply.js");
|
11
11
|
var name = 'quantileSeq';
|
12
|
-
var dependencies = ['typed', 'add', 'multiply', 'partitionSelect', 'compare', 'isInteger'];
|
12
|
+
var dependencies = ['typed', '?bignumber', 'add', 'subtract', 'divide', 'multiply', 'partitionSelect', 'compare', 'isInteger', 'smaller', 'smallerEq', 'larger'];
|
13
13
|
var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
|
14
14
|
var typed = _ref.typed,
|
15
|
+
bignumber = _ref.bignumber,
|
15
16
|
add = _ref.add,
|
17
|
+
subtract = _ref.subtract,
|
18
|
+
divide = _ref.divide,
|
16
19
|
multiply = _ref.multiply,
|
17
20
|
partitionSelect = _ref.partitionSelect,
|
18
21
|
compare = _ref.compare,
|
19
|
-
isInteger = _ref.isInteger
|
22
|
+
isInteger = _ref.isInteger,
|
23
|
+
smaller = _ref.smaller,
|
24
|
+
smallerEq = _ref.smallerEq,
|
25
|
+
larger = _ref.larger;
|
26
|
+
var apply = (0, _apply.createApply)({
|
27
|
+
typed: typed,
|
28
|
+
isInteger: isInteger
|
29
|
+
});
|
30
|
+
|
20
31
|
/**
|
21
32
|
* Compute the prob order quantile of a matrix or a list with values.
|
22
33
|
* The sequence is sorted and the middle value is returned.
|
@@ -51,130 +62,83 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
|
|
51
62
|
* @param {Boolean} sorted=false is data sorted in ascending order
|
52
63
|
* @return {Number, BigNumber, Unit, Array} Quantile(s)
|
53
64
|
*/
|
54
|
-
|
55
|
-
var apply = (0, _apply.createApply)({
|
56
|
-
typed: typed,
|
57
|
-
isInteger: isInteger
|
58
|
-
});
|
59
|
-
/**
|
60
|
-
* Check if array value types are valid, throw error otherwise.
|
61
|
-
* @param {number | BigNumber | Unit} x
|
62
|
-
* @param {number | BigNumber | Unit} x
|
63
|
-
* @private
|
64
|
-
*/
|
65
|
-
var validate = typed({
|
66
|
-
'number | BigNumber | Unit': function numberBigNumberUnit(x) {
|
67
|
-
return x;
|
68
|
-
}
|
69
|
-
});
|
70
65
|
return typed(name, {
|
71
|
-
'Array|Matrix, number|BigNumber
|
72
|
-
return
|
66
|
+
'Array | Matrix, number | BigNumber': function ArrayMatrixNumberBigNumber(data, p) {
|
67
|
+
return _quantileSeqProbNumber(data, p, false);
|
68
|
+
},
|
69
|
+
'Array | Matrix, number | BigNumber, number': function ArrayMatrixNumberBigNumberNumber(data, prob, dim) {
|
70
|
+
return _quantileSeqDim(data, prob, false, dim, _quantileSeqProbNumber);
|
71
|
+
},
|
72
|
+
'Array | Matrix, number | BigNumber, boolean': _quantileSeqProbNumber,
|
73
|
+
'Array | Matrix, number | BigNumber, boolean, number': function ArrayMatrixNumberBigNumberBooleanNumber(data, prob, sorted, dim) {
|
74
|
+
return _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbNumber);
|
73
75
|
},
|
74
|
-
'Array|Matrix,
|
75
|
-
|
76
|
-
return _quantileSeqDim(data, prob, false, dim);
|
76
|
+
'Array | Matrix, Array | Matrix': function ArrayMatrixArrayMatrix(data, p) {
|
77
|
+
return _quantileSeqProbCollection(data, p, false);
|
77
78
|
},
|
78
|
-
'Array|Matrix,
|
79
|
-
return _quantileSeqDim(data, prob,
|
79
|
+
'Array | Matrix, Array | Matrix, number': function ArrayMatrixArrayMatrixNumber(data, prob, dim) {
|
80
|
+
return _quantileSeqDim(data, prob, false, dim, _quantileSeqProbCollection);
|
81
|
+
},
|
82
|
+
'Array | Matrix, Array | Matrix, boolean': _quantileSeqProbCollection,
|
83
|
+
'Array | Matrix, Array | Matrix, boolean, number': function ArrayMatrixArrayMatrixBooleanNumber(data, prob, sorted, dim) {
|
84
|
+
return _quantileSeqDim(data, prob, sorted, dim, _quantileSeqProbCollection);
|
80
85
|
}
|
81
86
|
});
|
82
|
-
function _quantileSeqDim(data, prob, sorted, dim) {
|
83
|
-
// return [1.3, 1.2]
|
87
|
+
function _quantileSeqDim(data, prob, sorted, dim, fn) {
|
84
88
|
return apply(data, dim, function (x) {
|
85
|
-
return
|
89
|
+
return fn(x, prob, sorted);
|
86
90
|
});
|
87
91
|
}
|
88
|
-
function
|
89
|
-
var probArr
|
90
|
-
|
91
|
-
|
92
|
+
function _quantileSeqProbNumber(data, probOrN, sorted) {
|
93
|
+
var probArr;
|
94
|
+
var dataArr = data.valueOf();
|
95
|
+
if (smaller(probOrN, 0)) {
|
96
|
+
throw new Error('N/prob must be non-negative');
|
92
97
|
}
|
93
|
-
if ((
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
if (probOrN <= 1) {
|
102
|
-
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
103
|
-
return _quantileSeq(dataArr, probOrN, sorted);
|
104
|
-
}
|
105
|
-
if (probOrN > 1) {
|
106
|
-
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
107
|
-
if (!isInteger(probOrN)) {
|
108
|
-
throw new Error('N must be a positive integer');
|
109
|
-
}
|
110
|
-
var nPlusOne = probOrN + 1;
|
111
|
-
probArr = new Array(probOrN);
|
112
|
-
for (var i = 0; i < probOrN;) {
|
113
|
-
probArr[i] = _quantileSeq(dataArr, ++i / nPlusOne, sorted);
|
114
|
-
}
|
115
|
-
return probArr;
|
116
|
-
}
|
117
|
-
}
|
118
|
-
if ((0, _is.isBigNumber)(probOrN)) {
|
119
|
-
var BigNumber = probOrN.constructor;
|
120
|
-
if (probOrN.isNegative()) {
|
121
|
-
throw new Error('N/prob must be non-negative');
|
122
|
-
}
|
123
|
-
one = new BigNumber(1);
|
124
|
-
if (probOrN.lte(one)) {
|
125
|
-
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
126
|
-
return new BigNumber(_quantileSeq(dataArr, probOrN, sorted));
|
127
|
-
}
|
128
|
-
if (probOrN.gt(one)) {
|
129
|
-
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
130
|
-
if (!probOrN.isInteger()) {
|
131
|
-
throw new Error('N must be a positive integer');
|
132
|
-
}
|
133
|
-
|
134
|
-
// largest possible Array length is 2^32-1
|
135
|
-
// 2^32 < 10^15, thus safe conversion guaranteed
|
136
|
-
var intN = probOrN.toNumber();
|
137
|
-
if (intN > 4294967295) {
|
138
|
-
throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
|
139
|
-
}
|
140
|
-
var _nPlusOne = new BigNumber(intN + 1);
|
141
|
-
probArr = new Array(intN);
|
142
|
-
for (var _i = 0; _i < intN;) {
|
143
|
-
probArr[_i] = new BigNumber(_quantileSeq(dataArr, new BigNumber(++_i).div(_nPlusOne), sorted));
|
144
|
-
}
|
145
|
-
return probArr;
|
146
|
-
}
|
147
|
-
}
|
148
|
-
if ((0, _is.isCollection)(probOrN)) {
|
149
|
-
// quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
|
150
|
-
var probOrNArr = probOrN.valueOf();
|
151
|
-
probArr = new Array(probOrNArr.length);
|
152
|
-
for (var _i2 = 0; _i2 < probArr.length; ++_i2) {
|
153
|
-
var currProb = probOrNArr[_i2];
|
154
|
-
if ((0, _is.isNumber)(currProb)) {
|
155
|
-
if (currProb < 0 || currProb > 1) {
|
156
|
-
throw new Error('Probability must be between 0 and 1, inclusive');
|
157
|
-
}
|
158
|
-
} else if ((0, _is.isBigNumber)(currProb)) {
|
159
|
-
one = new currProb.constructor(1);
|
160
|
-
if (currProb.isNegative() || currProb.gt(one)) {
|
161
|
-
throw new Error('Probability must be between 0 and 1, inclusive');
|
162
|
-
}
|
163
|
-
} else {
|
164
|
-
throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
|
165
|
-
}
|
166
|
-
|
167
|
-
probArr[_i2] = _quantileSeq(dataArr, currProb, sorted);
|
168
|
-
}
|
169
|
-
return probArr;
|
170
|
-
}
|
171
|
-
throw new TypeError('Unexpected type of argument in function quantileSeq'); // FIXME: becomes redundant when converted to typed-function
|
98
|
+
if (smallerEq(probOrN, 1)) {
|
99
|
+
// quantileSeq([a, b, c, d, ...], prob[,sorted])
|
100
|
+
return (0, _is.isNumber)(probOrN) ? _quantileSeq(dataArr, probOrN, sorted) : bignumber(_quantileSeq(dataArr, probOrN, sorted));
|
101
|
+
}
|
102
|
+
if (larger(probOrN, 1)) {
|
103
|
+
// quantileSeq([a, b, c, d, ...], N[,sorted])
|
104
|
+
if (!isInteger(probOrN)) {
|
105
|
+
throw new Error('N must be a positive integer');
|
172
106
|
}
|
173
107
|
|
174
|
-
|
108
|
+
// largest possible Array length is 2^32-1
|
109
|
+
// 2^32 < 10^15, thus safe conversion guaranteed
|
110
|
+
if (larger(probOrN, 4294967295)) {
|
111
|
+
throw new Error('N must be less than or equal to 2^32-1, as that is the maximum length of an Array');
|
112
|
+
}
|
113
|
+
var nPlusOne = add(probOrN, 1);
|
114
|
+
probArr = [];
|
115
|
+
for (var i = 0; smaller(i, probOrN); i++) {
|
116
|
+
var prob = divide(i + 1, nPlusOne);
|
117
|
+
probArr.push(_quantileSeq(dataArr, prob, sorted));
|
118
|
+
}
|
119
|
+
return (0, _is.isNumber)(probOrN) ? probArr : bignumber(probArr);
|
175
120
|
}
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* Calculate the prob order quantile of an n-dimensional array.
|
125
|
+
*
|
126
|
+
* @param {Array, Matrix} array
|
127
|
+
* @param {Array, Matrix} prob
|
128
|
+
* @param {Boolean} sorted
|
129
|
+
* @return {Number, BigNumber, Unit} prob order quantile
|
130
|
+
* @private
|
131
|
+
*/
|
176
132
|
|
177
|
-
|
133
|
+
function _quantileSeqProbCollection(data, probOrN, sorted) {
|
134
|
+
var dataArr = data.valueOf();
|
135
|
+
// quantileSeq([a, b, c, d, ...], [prob1, prob2, ...][,sorted])
|
136
|
+
var probOrNArr = probOrN.valueOf();
|
137
|
+
var probArr = [];
|
138
|
+
for (var i = 0; i < probOrNArr.length; ++i) {
|
139
|
+
probArr.push(_quantileSeq(dataArr, probOrNArr[i], sorted));
|
140
|
+
}
|
141
|
+
return probArr;
|
178
142
|
}
|
179
143
|
|
180
144
|
/**
|
@@ -192,71 +156,30 @@ var createQuantileSeq = /* #__PURE__ */(0, _factory.factory)(name, dependencies,
|
|
192
156
|
if (len === 0) {
|
193
157
|
throw new Error('Cannot calculate quantile of an empty sequence');
|
194
158
|
}
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
validate(value);
|
201
|
-
return value;
|
202
|
-
}
|
203
|
-
var _integerPart = Math.floor(_index);
|
204
|
-
var _left;
|
205
|
-
var _right;
|
206
|
-
if (sorted) {
|
207
|
-
_left = flat[_integerPart];
|
208
|
-
_right = flat[_integerPart + 1];
|
209
|
-
} else {
|
210
|
-
_right = partitionSelect(flat, _integerPart + 1);
|
211
|
-
|
212
|
-
// max of partition is kth largest
|
213
|
-
_left = flat[_integerPart];
|
214
|
-
for (var i = 0; i < _integerPart; ++i) {
|
215
|
-
if (compare(flat[i], _left) > 0) {
|
216
|
-
_left = flat[i];
|
217
|
-
}
|
218
|
-
}
|
219
|
-
}
|
220
|
-
validate(_left);
|
221
|
-
validate(_right);
|
222
|
-
|
223
|
-
// Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
|
224
|
-
return add(multiply(_left, 1 - _fracPart), multiply(_right, _fracPart));
|
159
|
+
var index = (0, _is.isNumber)(prob) ? prob * (len - 1) : prob.times(len - 1);
|
160
|
+
var integerPart = (0, _is.isNumber)(prob) ? Math.floor(index) : index.floor().toNumber();
|
161
|
+
var fracPart = (0, _is.isNumber)(prob) ? index % 1 : index.minus(integerPart);
|
162
|
+
if (isInteger(index)) {
|
163
|
+
return sorted ? flat[index] : partitionSelect(flat, (0, _is.isNumber)(prob) ? index : index.valueOf());
|
225
164
|
}
|
226
|
-
|
227
|
-
// If prob is a BigNumber
|
228
|
-
var index = prob.times(len - 1);
|
229
|
-
if (index.isInteger()) {
|
230
|
-
index = index.toNumber();
|
231
|
-
var _value = sorted ? flat[index] : partitionSelect(flat, index);
|
232
|
-
validate(_value);
|
233
|
-
return _value;
|
234
|
-
}
|
235
|
-
var integerPart = index.floor();
|
236
|
-
var fracPart = index.minus(integerPart);
|
237
|
-
var integerPartNumber = integerPart.toNumber();
|
238
165
|
var left;
|
239
166
|
var right;
|
240
167
|
if (sorted) {
|
241
|
-
left = flat[
|
242
|
-
right = flat[
|
168
|
+
left = flat[integerPart];
|
169
|
+
right = flat[integerPart + 1];
|
243
170
|
} else {
|
244
|
-
right = partitionSelect(flat,
|
171
|
+
right = partitionSelect(flat, integerPart + 1);
|
245
172
|
|
246
173
|
// max of partition is kth largest
|
247
|
-
left = flat[
|
248
|
-
for (var
|
249
|
-
if (compare(flat[
|
250
|
-
left = flat[
|
174
|
+
left = flat[integerPart];
|
175
|
+
for (var i = 0; i < integerPart; ++i) {
|
176
|
+
if (compare(flat[i], left) > 0) {
|
177
|
+
left = flat[i];
|
251
178
|
}
|
252
179
|
}
|
253
180
|
}
|
254
|
-
validate(left);
|
255
|
-
validate(right);
|
256
|
-
|
257
181
|
// Q(prob) = (1-f)*A[floor(index)] + f*A[floor(index)+1]
|
258
|
-
|
259
|
-
return add(multiply(left, one.minus(fracPart)), multiply(right, fracPart));
|
182
|
+
return add(multiply(left, subtract(1, fracPart)), multiply(right, fracPart));
|
260
183
|
}
|
261
184
|
});
|
262
185
|
exports.createQuantileSeq = createQuantileSeq;
|