From d771bce46380e6a3fe4d94be85ce4dd1ecc68fe0 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 21:31:09 +0530 Subject: [PATCH 01/13] feat: add stats/base/ndarray/dmeanstdev --- .../stats/base/ndarray/dmeanstdev/README.md | 78 +++++++++++++++++++ .../ndarray/dmeanstdev/benchmark/benchmark.js | 76 ++++++++++++++++++ .../docs/img/equation_arithmetic_mean.svg | 42 ++++++++++ .../base/ndarray/dmeanstdev/docs/repl.txt | 28 +++++++ .../ndarray/dmeanstdev/docs/types/index.d.ts | 36 +++++++++ .../ndarray/dmeanstdev/docs/types/test.ts | 63 +++++++++++++++ .../base/ndarray/dmeanstdev/examples/index.js | 34 ++++++++ .../base/ndarray/dmeanstdev/lib/index.js | 46 +++++++++++ .../stats/base/ndarray/dmeanstdev/lib/main.js | 67 ++++++++++++++++ .../base/ndarray/dmeanstdev/package.json | 62 +++++++++++++++ .../base/ndarray/dmeanstdev/test/test.js | 69 ++++++++++++++++ 11 files changed, 601 insertions(+) create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/img/equation_arithmetic_mean.svg create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/package.json create mode 100644 lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md new file mode 100644 index 000000000000..3bd7561af3ba --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -0,0 +1,78 @@ + + +# dmeanstdev + +> Compute the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. + +
+ +The [arithmetic mean][arithmetic-mean] and standard deviation are defined as usual; this package provides a convenience function to compute both using the strided implementation. + +
+ +
+ +## Usage + +```javascript +var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); +``` + +#### dmeanstdev( arrays ) + +Computes the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. The function expects an input ndarray and an output ndarray (of length 2) to store the mean and standard deviation respectively. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); + +var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); + +var v = dmeanstdev( [ x, out ] ); +// returns [ 1.25, 2.5 ] +``` + +
+ +
+ +## Examples + +```javascript +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var ndarray2array = require( '@stdlib/ndarray/to-array' ); +var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); + +var xbuf = discreteUniform( 10, -50, 50, { + 'dtype': 'float64' +}); +var x = new ndarray( 'float64', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); +var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +console.log( ndarray2array( x ) ); + +var v = dmeanstdev( [ x, out ] ); +console.log( v ); +``` + +
diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js new file mode 100644 index 000000000000..b50ef406d71e --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js @@ -0,0 +1,76 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var bench = require( '@stdlib/bench' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var pkg = require( './../package.json' ).name; +var dmeanstdev = require( './../lib' ); + +var options = { + 'dtype': 'float64' +}; + +function createBenchmark( len ) { + var xbuf = uniform( len, -10.0, 10.0, options ); + var x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' ); + var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); + + return benchmark; + + function benchmark( b ) { + var v; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + v = dmeanstdev( [ x, out ] ); + if ( isNaN( v[ 0 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isNaN( v[ 0 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + +function main() { + var len; + var min; + var max; + var f; + var i; + + min = 1; + max = 6; + + for ( i = min; i <= max; i++ ) { + len = pow( 10, i ); + f = createBenchmark( len ); + bench( pkg+':len='+len, f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/img/equation_arithmetic_mean.svg b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/img/equation_arithmetic_mean.svg new file mode 100644 index 000000000000..c31439606fb6 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/img/equation_arithmetic_mean.svg @@ -0,0 +1,42 @@ + +mu equals StartFraction 1 Over n EndFraction sigma-summation Underscript i equals 0 Overscript n minus 1 Endscripts x Subscript i + + + \ No newline at end of file diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt new file mode 100644 index 000000000000..40c12b3d2ce2 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt @@ -0,0 +1,28 @@ + +{{alias}}( arrays ) + Computes the mean and standard deviation of a one-dimensional double-precision + floating-point ndarray. + + Parameters + ---------- + arrays: ArrayLikeObject + Array-like object containing two ndarrays: input and output. + + Returns + ------- + out: ndarray + ndarray containing mean and standard deviation. + + Examples + -------- + > var xbuf = new {{alias:@stdlib/array/float64}}( [ 2.0, 1.0, 2.0, -2.0 ] ); + > var dt = 'float64'; + > var sh = [ 4 ]; + > var sx = [ 1 ]; + > var ox = 0; + > var ord = 'row-major'; + > var x = new {{alias:@stdlib/ndarray/ctor}}( dt, xbuf, sh, sx, ox, ord ); + > var out = new {{alias:@stdlib/ndarray/ctor}}( dt, new {{alias:@stdlib/array/float64}}( 2 ), [ 2 ], [ 1 ], 0, ord ); + > {{alias}}( [ x, out ] ) + [ 1.25, 2.5 ] + diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/index.d.ts b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/index.d.ts new file mode 100644 index 000000000000..97eb527c4575 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/index.d.ts @@ -0,0 +1,36 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { float64ndarray } from '@stdlib/types/ndarray'; + +/** +* Computes the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. +* +* @param arrays - array-like object containing input and output ndarrays +* @returns output ndarray containing [ mean, stdev ] +*/ +declare function dmeanstdev( arrays: [ float64ndarray, float64ndarray ] ): float64ndarray; + + +// EXPORTS // + +export = dmeanstdev; diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts new file mode 100644 index 000000000000..c4869663913f --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts @@ -0,0 +1,63 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* eslint-disable space-in-parens */ + +import zeros = require( '@stdlib/ndarray/zeros' ); // eslint-disable-line import/no-unresolved +import dmeanstdev = require( './index' ); // eslint-disable-line import/no-unresolved + + +// TESTS // + +// The function returns an ndarray... +{ + const x = zeros( [ 10 ], { + 'dtype': 'float64' + }); + const out = zeros( [ 2 ], { + 'dtype': 'float64' + }); + + dmeanstdev( [ x, out ] ); // $ExpectType ndarray +} + +// The compiler throws an error if the function is provided a first argument which is not an array of ndarrays... +{ + dmeanstdev( '10' ); // $ExpectError + dmeanstdev( 10 ); // $ExpectError + dmeanstdev( true ); // $ExpectError + dmeanstdev( false ); // $ExpectError + dmeanstdev( null ); // $ExpectError + dmeanstdev( undefined ); // $ExpectError + dmeanstdev( [] ); // $ExpectError + dmeanstdev( {} ); // $ExpectError + dmeanstdev( ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const x = zeros( [ 10 ], { + 'dtype': 'float64' + }); + const out = zeros( [ 2 ], { + 'dtype': 'float64' + }); + + dmeanstdev(); // $ExpectError + dmeanstdev( [ x, out ], {} ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js new file mode 100644 index 000000000000..d1e02b2106a9 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js @@ -0,0 +1,34 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var ndarray2array = require( '@stdlib/ndarray/to-array' ); +var dmeanstdev = require( './../lib' ); + +var xbuf = discreteUniform( 10, -50, 50, { + 'dtype': 'float64' +}); +var x = new ndarray( 'float64', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); +var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +console.log( ndarray2array( x ) ); + +var v = dmeanstdev( [ x, out ] ); +console.log( v ); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js new file mode 100644 index 000000000000..776c9991244a --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js @@ -0,0 +1,46 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Compute the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. +* +* @module @stdlib/stats/base/ndarray/dmeanstdev +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray = require( '@stdlib/ndarray/base/ctor' ); +* var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); +* +* var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +* var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* +* var v = dmeanstdev( [ x, out ] ); +* // returns [ 1.25, 2.5 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js new file mode 100644 index 000000000000..6f9efecd2667 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js @@ -0,0 +1,67 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var numelDimension = require( '@stdlib/ndarray/base/numel-dimension' ); +var getData = require( '@stdlib/ndarray/base/data-buffer' ); +var getStride = require( '@stdlib/ndarray/base/stride' ); +var getOffset = require( '@stdlib/ndarray/base/offset' ); +var strided = require( '@stdlib/stats/strided/dmeanstdev' ).ndarray; + + +// MAIN // + +/** +* Computes the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. +* +* @param {ArrayLikeObject} arrays - array-like object containing: input ndarray and output ndarray +* @returns {Float64Array} output ndarray containing [ mean, stdev ] +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var ndarray = require( '@stdlib/ndarray/base/ctor' ); +* +* var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); +* var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +* var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* +* var v = dmeanstdev( [ x, out ] ); +* // returns [ 1.25, 2.5 ] +*/ +function dmeanstdev( arrays ) { + var x = arrays[ 0 ]; + var out = arrays[ 1 ]; + return strided( + numelDimension( x, 0 ), + 1, // correction (degrees of freedom) set to 1 for sample standard deviation + getData( x ), + getStride( x, 0 ), + getOffset( x ), + getData( out ), + getStride( out, 0 ), + getOffset( out ) + ); +} + + +// EXPORTS // + +module.exports = dmeanstdev; diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/package.json b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/package.json new file mode 100644 index 000000000000..da4304547960 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/package.json @@ -0,0 +1,62 @@ +{ + "name": "@stdlib/stats/base/ndarray/dmeanstdev", + "version": "0.0.0", + "description": "Compute the mean and standard deviation of a one-dimensional double-precision floating-point ndarray.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "statistics", + "stats", + "mean", + "standard deviation", + "stddev", + "ndarray", + "strided", + "float64" + ] +} diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js new file mode 100644 index 000000000000..d7822f6b9941 --- /dev/null +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js @@ -0,0 +1,69 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var dmeanstdev = require( './../lib' ); + +// FUNCTIONS // +function vector( buffer, length, stride, offset ) { + return new ndarray( 'float64', buffer, [ length ], [ stride ], offset, 'row-major' ); +} + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof dmeanstdev, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 1', function test( t ) { + t.strictEqual( dmeanstdev.length, 1, 'has expected arity' ); + t.end(); +}); + +tape( 'the function computes mean and stdev for a ndarray', function test( t ) { + var x; + var out; + var v; + + x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); + out = new Float64Array( 2 ); + + v = dmeanstdev( [ vector( x, 4, 2, 1 ), vector( out, 2, 1, 0 ) ] ); + t.deepEqual( v[ 0 ], 1.25, 'mean ok' ); + t.deepEqual( v[ 1 ], 2.5, 'stdev ok' ); + t.end(); +}); + +tape( 'supports empty input', function test( t ) { + var x; + var out; + var v; + + x = new Float64Array( [] ); + out = new Float64Array( 2 ); + + v = dmeanstdev( [ vector( x, 0, 1, 0 ), vector( out, 2, 1, 0 ) ] ); + t.strictEqual( isNaN( v[ 0 ] ), true, 'mean is NaN' ); + t.end(); +}); From c6afb790477d86d02f29c8d63e0662fc08ac820c Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 21:57:29 +0530 Subject: [PATCH 02/13] fix: lint-error --- .../stats/base/ndarray/dmeanstdev/README.md | 114 +++++++++++++++++- .../ndarray/dmeanstdev/benchmark/benchmark.js | 39 +++++- .../stats/base/ndarray/dmeanstdev/lib/main.js | 15 +-- .../base/ndarray/dmeanstdev/test/test.js | 22 +++- 4 files changed, 167 insertions(+), 23 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 3bd7561af3ba..0e6809858b7a 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -20,14 +20,76 @@ limitations under the License. # dmeanstdev -> Compute the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. +> Compute the [arithmetic mean][arithmetic-mean] and [standard deviation][standard-deviation] of a one-dimensional double-precision floating-point ndarray.
-The [arithmetic mean][arithmetic-mean] and standard deviation are defined as usual; this package provides a convenience function to compute both using the strided implementation. +The population [standard deviation][standard-deviation] of a finite size population of size `N` is given by + + + +```math +\sigma = \sqrt{\frac{1}{N} \sum_{i=0}^{N-1} (x_i - \mu)^2} +``` + + + + + +where the population mean is given by + + + +```math +\mu = \frac{1}{N} \sum_{i=0}^{N-1} x_i +``` + + + + + +Often in the analysis of data, the true population [standard deviation][standard-deviation] is not known _a priori_ and must be estimated from a sample drawn from the population distribution. If one attempts to use the formula for the population [standard deviation][standard-deviation], the result is biased and yields an **uncorrected sample standard deviation**. To compute a **corrected sample standard deviation** for a sample of size `n`, + + + +```math +s = \sqrt{\frac{1}{n-1} \sum_{i=0}^{n-1} (x_i - \bar{x})^2} +``` + + + + + +where the sample mean is given by + + + +```math +\bar{x} = \frac{1}{n} \sum_{i=0}^{n-1} x_i +``` + + + + + +The use of the term `n-1` is commonly referred to as Bessel's correction. Note, however, that applying Bessel's correction can increase the mean squared error between the sample standard deviation and population standard deviation. Depending on the characteristics of the population distribution, other correction factors (e.g., `n-1.5`, `n+1`, etc) can yield better estimators.
+ +
## Usage @@ -38,7 +100,7 @@ var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); #### dmeanstdev( arrays ) -Computes the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. The function expects an input ndarray and an output ndarray (of length 2) to store the mean and standard deviation respectively. +Computes the [mean][arithmetic-mean] and [standard deviation][standard-deviation] of a one-dimensional double-precision floating-point ndarray. ```javascript var Float64Array = require( '@stdlib/array/float64' ); @@ -52,14 +114,36 @@ var v = dmeanstdev( [ x, out ] ); // returns [ 1.25, 2.5 ] ``` +The function has the following parameters: + +- **arrays**: array-like object containing a one-dimensional input ndarray and an output ndarray (of length 2) to store the [mean][arithmetic-mean] and [standard deviation][standard-deviation]. + +The output ndarray contains two elements: the [arithmetic mean][arithmetic-mean] at index 0 and the [standard deviation][standard-deviation] at index 1. By default, the [standard deviation][standard-deviation] is computed using Bessel's correction (i.e., a degrees of freedom adjustment equal to 1). +
+ + +
+ +## Notes + +- If provided an empty one-dimensional ndarray, the function returns a [mean][arithmetic-mean] and [standard deviation][standard-deviation] equal to `NaN`. +- Due to the wrapper providing output elements in a fixed format via the output ndarray, the correction parameter is implicitly set to `1` (Bessel's correction). This computes the **corrected sample standard deviation**. To use a different correction factor, use the [`@stdlib/stats/strided/dmeanstdev`][@stdlib/stats/strided/dmeanstdev] package directly. + +
+ + +
## Examples + + ```javascript var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var Float64Array = require( '@stdlib/array/float64' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var ndarray2array = require( '@stdlib/ndarray/to-array' ); var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); @@ -76,3 +160,27 @@ console.log( v ); ```
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js index b50ef406d71e..fb0b15b7b2ea 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js @@ -18,21 +18,41 @@ 'use strict'; +// MODULES // + var bench = require( '@stdlib/bench' ); var uniform = require( '@stdlib/random/array/uniform' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); var pow = require( '@stdlib/math/base/special/pow' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var pkg = require( './../package.json' ).name; var dmeanstdev = require( './../lib' ); + +// VARIABLES // + var options = { 'dtype': 'float64' }; + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} len - array length +* @returns {Function} benchmark function +*/ function createBenchmark( len ) { - var xbuf = uniform( len, -10.0, 10.0, options ); - var x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' ); - var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); + var xbuf; + var x; + var out; + + xbuf = uniform( len, -10.0, 10.0, options ); + x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' ); + out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); return benchmark; @@ -43,12 +63,12 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { v = dmeanstdev( [ x, out ] ); - if ( isNaN( v[ 0 ] ) ) { + if ( isnan( v[ 0 ] ) ) { b.fail( 'should not return NaN' ); } } b.toc(); - if ( isNaN( v[ 0 ] ) ) { + if ( isnan( v[ 0 ] ) ) { b.fail( 'should not return NaN' ); } b.pass( 'benchmark finished' ); @@ -56,6 +76,14 @@ function createBenchmark( len ) { } } + +// MAIN // + +/** +* Main execution. +* +* @private +*/ function main() { var len; var min; @@ -73,4 +101,5 @@ function main() { } } + main(); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js index 6f9efecd2667..ead626d3d920 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js @@ -21,9 +21,9 @@ // MODULES // var numelDimension = require( '@stdlib/ndarray/base/numel-dimension' ); -var getData = require( '@stdlib/ndarray/base/data-buffer' ); var getStride = require( '@stdlib/ndarray/base/stride' ); var getOffset = require( '@stdlib/ndarray/base/offset' ); +var getData = require( '@stdlib/ndarray/base/data-buffer' ); var strided = require( '@stdlib/stats/strided/dmeanstdev' ).ndarray; @@ -47,18 +47,9 @@ var strided = require( '@stdlib/stats/strided/dmeanstdev' ).ndarray; * // returns [ 1.25, 2.5 ] */ function dmeanstdev( arrays ) { - var x = arrays[ 0 ]; var out = arrays[ 1 ]; - return strided( - numelDimension( x, 0 ), - 1, // correction (degrees of freedom) set to 1 for sample standard deviation - getData( x ), - getStride( x, 0 ), - getOffset( x ), - getData( out ), - getStride( out, 0 ), - getOffset( out ) - ); + var x = arrays[ 0 ]; + return strided( numelDimension( x, 0 ), 1, getData( x ), getStride( x, 0 ), getOffset( x ), getData( out ), getStride( out, 0 ), getOffset( out ) ); // eslint-disable-line max-len } diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js index d7822f6b9941..911ffb1d0a29 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js @@ -18,16 +18,32 @@ 'use strict'; +// MODULES // + var tape = require( 'tape' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); var Float64Array = require( '@stdlib/array/float64' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var dmeanstdev = require( './../lib' ); + // FUNCTIONS // + +/** +* Returns a one-dimensional ndarray. +* +* @private +* @param {Collection} buffer - underlying data buffer +* @param {NonNegativeInteger} length - number of indexed elements +* @param {integer} stride - stride length +* @param {NonNegativeInteger} offset - index offset +* @returns {ndarray} one-dimensional ndarray +*/ function vector( buffer, length, stride, offset ) { return new ndarray( 'float64', buffer, [ length ], [ stride ], offset, 'row-major' ); } + // TESTS // tape( 'main export is a function', function test( t ) { @@ -52,7 +68,7 @@ tape( 'the function computes mean and stdev for a ndarray', function test( t ) { v = dmeanstdev( [ vector( x, 4, 2, 1 ), vector( out, 2, 1, 0 ) ] ); t.deepEqual( v[ 0 ], 1.25, 'mean ok' ); t.deepEqual( v[ 1 ], 2.5, 'stdev ok' ); - t.end(); + t.end(); }); tape( 'supports empty input', function test( t ) { @@ -64,6 +80,6 @@ tape( 'supports empty input', function test( t ) { out = new Float64Array( 2 ); v = dmeanstdev( [ vector( x, 0, 1, 0 ), vector( out, 2, 1, 0 ) ] ); - t.strictEqual( isNaN( v[ 0 ] ), true, 'mean is NaN' ); - t.end(); + t.strictEqual( isnan( v[ 0 ] ), true, 'mean is NaN' ); + t.end(); }); From 5bd2d80906fbe96a392d1e195d7e5f7242d8cb22 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:02:55 +0530 Subject: [PATCH 03/13] fix: lint --- .../@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js index d1e02b2106a9..6bd4506079e5 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js @@ -19,6 +19,7 @@ 'use strict'; var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var Float64Array = require( '@stdlib/array/float64' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var ndarray2array = require( '@stdlib/ndarray/to-array' ); var dmeanstdev = require( './../lib' ); From b0a39eccda6d6bf4e6b97d5e483934204d7d66f8 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:11:29 +0530 Subject: [PATCH 04/13] fix: repl.txt --- .../@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt | 8 +++++--- .../@stdlib/stats/base/ndarray/dmeanstdev/test/test.js | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt index 40c12b3d2ce2..785c1a39219c 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt @@ -1,7 +1,7 @@ {{alias}}( arrays ) - Computes the mean and standard deviation of a one-dimensional double-precision - floating-point ndarray. + Computes the mean and standard deviation of a one-dimensional + double-precision floating-point ndarray. Parameters ---------- @@ -24,5 +24,7 @@ > var x = new {{alias:@stdlib/ndarray/ctor}}( dt, xbuf, sh, sx, ox, ord ); > var out = new {{alias:@stdlib/ndarray/ctor}}( dt, new {{alias:@stdlib/array/float64}}( 2 ), [ 2 ], [ 1 ], 0, ord ); > {{alias}}( [ x, out ] ) - [ 1.25, 2.5 ] + + See Also + -------- \ No newline at end of file diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js index 911ffb1d0a29..d100783e4cdf 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js @@ -58,8 +58,8 @@ tape( 'the function has an arity of 1', function test( t ) { }); tape( 'the function computes mean and stdev for a ndarray', function test( t ) { - var x; var out; + var x; var v; x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); @@ -72,8 +72,8 @@ tape( 'the function computes mean and stdev for a ndarray', function test( t ) { }); tape( 'supports empty input', function test( t ) { - var x; var out; + var x; var v; x = new Float64Array( [] ); From cf3109c3c7d6b530db9e8f06760bcf64f34bc4e1 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:29:00 +0530 Subject: [PATCH 05/13] fix: benchmark.js --- .../ndarray/dmeanstdev/benchmark/benchmark.js | 3 ++- .../base/ndarray/dmeanstdev/docs/repl.txt | 23 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js index fb0b15b7b2ea..2e1b117e3821 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js @@ -25,6 +25,7 @@ var uniform = require( '@stdlib/random/array/uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var pow = require( '@stdlib/math/base/special/pow' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var Float64Array = require( '@stdlib/array/float64' ); var pkg = require( './../package.json' ).name; var dmeanstdev = require( './../lib' ); @@ -47,8 +48,8 @@ var options = { */ function createBenchmark( len ) { var xbuf; - var x; var out; + var x; xbuf = uniform( len, -10.0, 10.0, options ); x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' ); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt index 785c1a39219c..ae1fef77e16c 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt @@ -1,7 +1,9 @@ {{alias}}( arrays ) - Computes the mean and standard deviation of a one-dimensional - double-precision floating-point ndarray. + Computes the mean and standard deviation of a one-dimensional double-precision + floating-point ndarray. + + If provided an empty ndarray, the function returns `NaN` values. Parameters ---------- @@ -11,20 +13,29 @@ Returns ------- out: ndarray - ndarray containing mean and standard deviation. + An ndarray containing the mean and standard deviation. Examples -------- > var xbuf = new {{alias:@stdlib/array/float64}}( [ 2.0, 1.0, 2.0, -2.0 ] ); > var dt = 'float64'; - > var sh = [ 4 ]; + > var sh = [ xbuf.length ]; > var sx = [ 1 ]; > var ox = 0; > var ord = 'row-major'; > var x = new {{alias:@stdlib/ndarray/ctor}}( dt, xbuf, sh, sx, ox, ord ); - > var out = new {{alias:@stdlib/ndarray/ctor}}( dt, new {{alias:@stdlib/array/float64}}( 2 ), [ 2 ], [ 1 ], 0, ord ); + > var out = new {{alias:@stdlib/ndarray/ctor}}( + ... dt, + ... new {{alias:@stdlib/array/float64}}( 2 ), + ... [ 2 ], + ... [ 1 ], + ... 0, + ... ord + ... ); > {{alias}}( [ x, out ] ) See Also - -------- \ No newline at end of file + -------- + + \ No newline at end of file From 23bac110b5a29a6fd21dbef83214b00d7fcee103 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:38:01 +0530 Subject: [PATCH 06/13] fix: lint --- .../base/ndarray/dmeanstdev/benchmark/benchmark.js | 8 +++----- .../stats/base/ndarray/dmeanstdev/docs/repl.txt | 12 ++++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js index 2e1b117e3821..fa32cbe06fd9 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js @@ -81,7 +81,7 @@ function createBenchmark( len ) { // MAIN // /** -* Main execution. +* Main execution sequence. * * @private */ @@ -92,8 +92,8 @@ function main() { var f; var i; - min = 1; - max = 6; + min = 1; // 10^min + max = 6; // 10^max for ( i = min; i <= max; i++ ) { len = pow( 10, i ); @@ -101,6 +101,4 @@ function main() { bench( pkg+':len='+len, f ); } } - - main(); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt index ae1fef77e16c..01b58ca37dcc 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt @@ -1,7 +1,7 @@ {{alias}}( arrays ) - Computes the mean and standard deviation of a one-dimensional double-precision - floating-point ndarray. + Computes the mean and standard deviation of a one-dimensional double- + precision floating-point ndarray. If provided an empty ndarray, the function returns `NaN` values. @@ -32,10 +32,10 @@ ... 0, ... ord ... ); - > {{alias}}( [ x, out ] ) - + > {{alias}}( [ x, out ] ); + > {{alias:@stdlib/ndarray/to-array}}( out ) + [ ~0.75, ~1.8930 ] See Also -------- - - \ No newline at end of file + From 76d09aa34717dcdb83cf541db36f4fbc04037538 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:48:49 +0530 Subject: [PATCH 07/13] Update: README.md --- .../stats/base/ndarray/dmeanstdev/README.md | 63 +++++-------------- 1 file changed, 15 insertions(+), 48 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 0e6809858b7a..7bd729f4ef12 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -24,67 +24,37 @@ limitations under the License.
-The population [standard deviation][standard-deviation] of a finite size population of size `N` is given by +The [arithmetic mean][arithmetic-mean] and [standard deviation][standard-deviation] are defined as - + ```math -\sigma = \sqrt{\frac{1}{N} \sum_{i=0}^{N-1} (x_i - \mu)^2} +\mu = \frac{1}{n} \sum_{i=0}^{n-1} x_i ``` - -where the population mean is given by +and - + ```math -\mu = \frac{1}{N} \sum_{i=0}^{N-1} x_i +\sigma = \sqrt{\frac{1}{n-1} \sum_{i=0}^{n-1} (x_i - \mu)^2} ``` - -Often in the analysis of data, the true population [standard deviation][standard-deviation] is not known _a priori_ and must be estimated from a sample drawn from the population distribution. If one attempts to use the formula for the population [standard deviation][standard-deviation], the result is biased and yields an **uncorrected sample standard deviation**. To compute a **corrected sample standard deviation** for a sample of size `n`, - - - -```math -s = \sqrt{\frac{1}{n-1} \sum_{i=0}^{n-1} (x_i - \bar{x})^2} -``` - - - - - -where the sample mean is given by - - - -```math -\bar{x} = \frac{1}{n} \sum_{i=0}^{n-1} x_i -``` - - - - - -The use of the term `n-1` is commonly referred to as Bessel's correction. Note, however, that applying Bessel's correction can increase the mean squared error between the sample standard deviation and population standard deviation. Depending on the characteristics of the population distribution, other correction factors (e.g., `n-1.5`, `n+1`, etc) can yield better estimators. +where the use of the term `n-1` is commonly referred to as Bessel's correction.
@@ -100,18 +70,18 @@ var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); #### dmeanstdev( arrays ) -Computes the [mean][arithmetic-mean] and [standard deviation][standard-deviation] of a one-dimensional double-precision floating-point ndarray. +Computes the [arithmetic mean][arithmetic-mean] and [standard deviation][standard-deviation] of a one-dimensional double-precision floating-point ndarray. ```javascript var Float64Array = require( '@stdlib/array/float64' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); -var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); -var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +var xbuf = new Float64Array( [ 1.0, 3.0, 4.0, 2.0 ] ); +var x = new ndarray( 'float64', xbuf, [ 4 ], [ 1 ], 0, 'row-major' ); var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); var v = dmeanstdev( [ x, out ] ); -// returns [ 1.25, 2.5 ] +// returns ``` The function has the following parameters: @@ -129,7 +99,6 @@ The output ndarray contains two elements: the [arithmetic mean][arithmetic-mean] ## Notes - If provided an empty one-dimensional ndarray, the function returns a [mean][arithmetic-mean] and [standard deviation][standard-deviation] equal to `NaN`. -- Due to the wrapper providing output elements in a fixed format via the output ndarray, the correction parameter is implicitly set to `1` (Bessel's correction). This computes the **corrected sample standard deviation**. To use a different correction factor, use the [`@stdlib/stats/strided/dmeanstdev`][@stdlib/stats/strided/dmeanstdev] package directly. @@ -179,8 +148,6 @@ console.log( v ); [standard-deviation]: https://en.wikipedia.org/wiki/Standard_deviation -[@stdlib/stats/strided/dmeanstdev]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/strided/dmeanstdev - From 23203eaa960df74a102912c9e81ae278c8963c70 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Thu, 13 Nov 2025 22:53:22 +0530 Subject: [PATCH 08/13] fix: README.md --- .../@stdlib/stats/base/ndarray/dmeanstdev/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 7bd729f4ef12..5d7afaadc598 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -81,7 +81,7 @@ var x = new ndarray( 'float64', xbuf, [ 4 ], [ 1 ], 0, 'row-major' ); var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); var v = dmeanstdev( [ x, out ] ); -// returns +// returns [ 2.5, ~1.2910 ] ``` The function has the following parameters: From 0a92629398b390f90027b6399bef9fc3979c4f24 Mon Sep 17 00:00:00 2001 From: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:40:05 +0530 Subject: [PATCH 09/13] Update lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md Co-authored-by: Athan Signed-off-by: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> --- .../@stdlib/stats/base/ndarray/dmeanstdev/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 5d7afaadc598..44eb7c82dc43 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -88,8 +88,6 @@ The function has the following parameters: - **arrays**: array-like object containing a one-dimensional input ndarray and an output ndarray (of length 2) to store the [mean][arithmetic-mean] and [standard deviation][standard-deviation]. -The output ndarray contains two elements: the [arithmetic mean][arithmetic-mean] at index 0 and the [standard deviation][standard-deviation] at index 1. By default, the [standard deviation][standard-deviation] is computed using Bessel's correction (i.e., a degrees of freedom adjustment equal to 1). - From 568f24bffba2067e78888db62b809990a0d14562 Mon Sep 17 00:00:00 2001 From: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:40:13 +0530 Subject: [PATCH 10/13] Update lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md Co-authored-by: Athan Signed-off-by: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> --- .../@stdlib/stats/base/ndarray/dmeanstdev/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 44eb7c82dc43..2edae0efefec 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -96,7 +96,7 @@ The function has the following parameters: ## Notes -- If provided an empty one-dimensional ndarray, the function returns a [mean][arithmetic-mean] and [standard deviation][standard-deviation] equal to `NaN`. +- If provided an empty one-dimensional ndarray, the computed [arithmetic mean][arithmetic-mean] and [standard deviation][standard-deviation] are equal to `NaN`. From 731eb3ac7561140d7bbea5003c9b02bf219e65ec Mon Sep 17 00:00:00 2001 From: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> Date: Fri, 14 Nov 2025 14:42:59 +0530 Subject: [PATCH 11/13] Update lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md Co-authored-by: Athan Signed-off-by: Sachin Pangal <151670745+Orthodox-64@users.noreply.github.com> --- .../@stdlib/stats/base/ndarray/dmeanstdev/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 2edae0efefec..4d945dae77a1 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -86,7 +86,7 @@ var v = dmeanstdev( [ x, out ] ); The function has the following parameters: -- **arrays**: array-like object containing a one-dimensional input ndarray and an output ndarray (of length 2) to store the [mean][arithmetic-mean] and [standard deviation][standard-deviation]. +- **arrays**: array-like object containing a one-dimensional input ndarray and a one-dimensional output ndarray. From 7039c2ac8c22c0d804080cc6d0a140c88a6699dc Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Fri, 14 Nov 2025 23:00:35 +0530 Subject: [PATCH 12/13] fix: requested-changes --- .../stats/base/ndarray/dmeanstdev/README.md | 36 +++- .../ndarray/dmeanstdev/benchmark/benchmark.js | 5 +- .../base/ndarray/dmeanstdev/docs/repl.txt | 22 ++- .../base/ndarray/dmeanstdev/examples/index.js | 13 +- .../stats/base/ndarray/dmeanstdev/lib/main.js | 34 +++- .../base/ndarray/dmeanstdev/test/test.js | 179 +++++++++++++++++- 6 files changed, 250 insertions(+), 39 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md index 4d945dae77a1..586abb1bdfe7 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/README.md @@ -74,19 +74,32 @@ Computes the [arithmetic mean][arithmetic-mean] and [standard deviation][standar ```javascript var Float64Array = require( '@stdlib/array/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var opts = { + 'dtype': 'float64' +}; + var xbuf = new Float64Array( [ 1.0, 3.0, 4.0, 2.0 ] ); -var x = new ndarray( 'float64', xbuf, [ 4 ], [ 1 ], 0, 'row-major' ); -var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +var x = new ndarray( opts.dtype, xbuf, [ 4 ], [ 1 ], 0, 'row-major' ); +var out = new ndarray( opts.dtype, new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); -var v = dmeanstdev( [ x, out ] ); -// returns [ 2.5, ~1.2910 ] +var correction = scalar2ndarray( 1.0, opts ); + +var v = dmeanstdev( [ x, out, correction ] ); +// returns ``` The function has the following parameters: -- **arrays**: array-like object containing a one-dimensional input ndarray and a one-dimensional output ndarray. +- **arrays**: array-like object containing the following ndarrays in order: + + 1. a one-dimensional input ndarray. + 2. a one-dimensional output ndarray (of length 2) to store the [mean][arithmetic-mean] and [standard deviation][standard-deviation]. + 3. a zero-dimensional ndarray specifying the degrees of freedom adjustment. + +The output ndarray contains two elements: the [arithmetic mean][arithmetic-mean] at index 0 and the [standard deviation][standard-deviation] at index 1. The [standard deviation][standard-deviation] is computed using the provided degrees of freedom adjustment. Setting the correction parameter to `1` corresponds to Bessel's correction (i.e., the corrected sample standard deviation). Setting it to `0` computes the population standard deviation. @@ -111,18 +124,25 @@ The function has the following parameters: ```javascript var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var Float64Array = require( '@stdlib/array/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var ndarray2array = require( '@stdlib/ndarray/to-array' ); var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); +var opts = { + 'dtype': 'float64' +}; + var xbuf = discreteUniform( 10, -50, 50, { 'dtype': 'float64' }); -var x = new ndarray( 'float64', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); -var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +var x = new ndarray( opts.dtype, xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); +var out = new ndarray( opts.dtype, new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +var correction = scalar2ndarray( 1.0, opts ); + console.log( ndarray2array( x ) ); -var v = dmeanstdev( [ x, out ] ); +var v = dmeanstdev( [ x, out, correction ] ); console.log( v ); ``` diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js index fa32cbe06fd9..76098ffaa7d4 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/benchmark/benchmark.js @@ -24,6 +24,7 @@ var bench = require( '@stdlib/bench' ); var uniform = require( '@stdlib/random/array/uniform' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var pow = require( '@stdlib/math/base/special/pow' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var Float64Array = require( '@stdlib/array/float64' ); var pkg = require( './../package.json' ).name; @@ -47,6 +48,7 @@ var options = { * @returns {Function} benchmark function */ function createBenchmark( len ) { + var correction; var xbuf; var out; var x; @@ -54,6 +56,7 @@ function createBenchmark( len ) { xbuf = uniform( len, -10.0, 10.0, options ); x = new ndarray( options.dtype, xbuf, [ len ], [ 1 ], 0, 'row-major' ); out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); + correction = scalar2ndarray( 1.0, options ); return benchmark; @@ -63,7 +66,7 @@ function createBenchmark( len ) { b.tic(); for ( i = 0; i < b.iterations; i++ ) { - v = dmeanstdev( [ x, out ] ); + v = dmeanstdev( [ x, out, correction ] ); if ( isnan( v[ 0 ] ) ) { b.fail( 'should not return NaN' ); } diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt index 01b58ca37dcc..9946433f04bc 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/repl.txt @@ -8,7 +8,13 @@ Parameters ---------- arrays: ArrayLikeObject - Array-like object containing two ndarrays: input and output. + Array-like object containing the following ndarrays in order: + + - a one-dimensional input ndarray. + - a one-dimensional output ndarray (of length 2) to store the mean + and standard deviation. + - a zero-dimensional ndarray specifying the degrees of freedom + adjustment. Returns ------- @@ -24,15 +30,11 @@ > var ox = 0; > var ord = 'row-major'; > var x = new {{alias:@stdlib/ndarray/ctor}}( dt, xbuf, sh, sx, ox, ord ); - > var out = new {{alias:@stdlib/ndarray/ctor}}( - ... dt, - ... new {{alias:@stdlib/array/float64}}( 2 ), - ... [ 2 ], - ... [ 1 ], - ... 0, - ... ord - ... ); - > {{alias}}( [ x, out ] ); + > var o = new {{alias:@stdlib/array/float64}}( 2 ); + > var out = new {{alias:@stdlib/ndarray/ctor}}( dt, o, [ 2 ], [ 1 ], ox, ord ); + > var opts = { 'dtype': dt }; + > var correction = {{alias:@stdlib/ndarray/from-scalar}}( 1.0, opts ); + > {{alias}}( [ x, out, correction ] ); > {{alias:@stdlib/ndarray/to-array}}( out ) [ ~0.75, ~1.8930 ] diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js index 6bd4506079e5..9ee89317bca8 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/examples/index.js @@ -20,16 +20,23 @@ var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); var Float64Array = require( '@stdlib/array/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var ndarray2array = require( '@stdlib/ndarray/to-array' ); var dmeanstdev = require( './../lib' ); +var opts = { + 'dtype': 'float64' +}; + var xbuf = discreteUniform( 10, -50, 50, { 'dtype': 'float64' }); -var x = new ndarray( 'float64', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); -var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +var x = new ndarray( opts.dtype, xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' ); +var out = new ndarray( opts.dtype, new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +var correction = scalar2ndarray( 1.0, opts ); + console.log( ndarray2array( x ) ); -var v = dmeanstdev( [ x, out ] ); +var v = dmeanstdev( [ x, out, correction ] ); console.log( v ); diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js index ead626d3d920..3d62e1639da0 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/main.js @@ -24,6 +24,7 @@ var numelDimension = require( '@stdlib/ndarray/base/numel-dimension' ); var getStride = require( '@stdlib/ndarray/base/stride' ); var getOffset = require( '@stdlib/ndarray/base/offset' ); var getData = require( '@stdlib/ndarray/base/data-buffer' ); +var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' ); var strided = require( '@stdlib/stats/strided/dmeanstdev' ).ndarray; @@ -32,24 +33,39 @@ var strided = require( '@stdlib/stats/strided/dmeanstdev' ).ndarray; /** * Computes the mean and standard deviation of a one-dimensional double-precision floating-point ndarray. * -* @param {ArrayLikeObject} arrays - array-like object containing: input ndarray and output ndarray -* @returns {Float64Array} output ndarray containing [ mean, stdev ] +* @param {ArrayLikeObject} arrays - array-like object containing ndarrays +* @returns {ndarrayLike} output ndarray * * @example * var Float64Array = require( '@stdlib/array/float64' ); +* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); * var ndarray = require( '@stdlib/ndarray/base/ctor' ); * +* var opts = { +* 'dtype': 'float64' +* }; +* * var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); -* var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); -* var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* var x = new ndarray( opts.dtype, xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +* var out = new ndarray( opts.dtype, new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* +* var correction = scalar2ndarray( 1.0, opts ); * -* var v = dmeanstdev( [ x, out ] ); -* // returns [ 1.25, 2.5 ] +* var v = dmeanstdev( [ x, out, correction ] ); +* // returns */ function dmeanstdev( arrays ) { - var out = arrays[ 1 ]; - var x = arrays[ 0 ]; - return strided( numelDimension( x, 0 ), 1, getData( x ), getStride( x, 0 ), getOffset( x ), getData( out ), getStride( out, 0 ), getOffset( out ) ); // eslint-disable-line max-len + var correction; + var out; + var x; + + x = arrays[ 0 ]; + out = arrays[ 1 ]; + correction = ndarraylike2scalar( arrays[ 2 ] ); + + strided( numelDimension( x, 0 ), correction, getData( x ), getStride( x, 0 ), getOffset( x ), getData( out ), getStride( out, 0 ), getOffset( out ) ); // eslint-disable-line max-len + + return out; } diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js index d100783e4cdf..040591f84cc1 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/test/test.js @@ -21,8 +21,11 @@ // MODULES // var tape = require( 'tape' ); +var sqrt = require( '@stdlib/math/base/special/sqrt' ); var isnan = require( '@stdlib/math/base/assert/is-nan' ); var Float64Array = require( '@stdlib/array/float64' ); +var getData = require( '@stdlib/ndarray/base/data-buffer' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); var ndarray = require( '@stdlib/ndarray/base/ctor' ); var dmeanstdev = require( './../lib' ); @@ -57,29 +60,189 @@ tape( 'the function has an arity of 1', function test( t ) { t.end(); }); -tape( 'the function computes mean and stdev for a ndarray', function test( t ) { +tape( 'the function calculates the arithmetic mean and standard deviation of a one-dimensional ndarray', function test( t ) { + var correction; + var expected; + var opts; var out; var x; var v; - x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); + opts = { + 'dtype': 'float64' + }; + + x = new Float64Array( [ 1.0, -2.0, -4.0, 5.0, 0.0, 3.0 ] ); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, x.length, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + expected = new Float64Array( [ 0.5, sqrt( 53.5/(x.length-1) ) ] ); + t.deepEqual( getData( v ), expected, 'returns expected value' ); + + x = new Float64Array( [ -4.0, -5.0 ] ); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, x.length, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + expected = new Float64Array( [ -4.5, sqrt( 0.5 ) ] ); + t.deepEqual( getData( v ), expected, 'returns expected value' ); + + x = new Float64Array( [ NaN ] ); out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, x.length, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + t.strictEqual( isnan( getData( v )[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnan( getData( v )[ 1 ] ), true, 'returns expected value' ); + + x = new Float64Array( [ NaN, NaN ] ); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, x.length, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + t.strictEqual( isnan( getData( v )[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnan( getData( v )[ 1 ] ), true, 'returns expected value' ); - v = dmeanstdev( [ vector( x, 4, 2, 1 ), vector( out, 2, 1, 0 ) ] ); - t.deepEqual( v[ 0 ], 1.25, 'mean ok' ); - t.deepEqual( v[ 1 ], 2.5, 'stdev ok' ); t.end(); }); -tape( 'supports empty input', function test( t ) { +tape( 'if provided an empty vector, the function returns `NaN` values', function test( t ) { + var correction; + var opts; var out; var x; var v; + opts = { + 'dtype': 'float64' + }; + x = new Float64Array( [] ); out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, 0, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + t.strictEqual( isnan( getData( v )[ 0 ] ), true, 'returns expected value' ); + t.strictEqual( isnan( getData( v )[ 1 ] ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'if provided a vector containing a single element, the function returns that element as mean and `NaN` as standard deviation when using sample correction', function test( t ) { + var correction; + var opts; + var out; + var x; + var v; + + opts = { + 'dtype': 'float64' + }; + + x = new Float64Array( [ 1.0 ] ); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, 1, 1, 0 ), vector( out, 2, 1, 0 ), correction ] ); + t.strictEqual( getData( v )[ 0 ], 1.0, 'returns expected mean' ); + t.strictEqual( isnan( getData( v )[ 1 ] ), true, 'returns NaN for stdev' ); + + t.end(); +}); + +tape( 'the function supports one-dimensional ndarrays having non-unit strides', function test( t ) { + var correction; + var expected; + var opts; + var out; + var x; + var v; + + opts = { + 'dtype': 'float64' + }; + + x = new Float64Array([ + 1.0, // 0 + 2.0, + 2.0, // 1 + -7.0, + -2.0, // 2 + 3.0, + 4.0, // 3 + 2.0 + ]); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, 4, 2, 0 ), vector( out, 2, 1, 0 ), correction ] ); + expected = new Float64Array( [ 1.25, 2.5 ] ); + t.deepEqual( getData( v ), expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports one-dimensional ndarrays having negative strides', function test( t ) { + var correction; + var expected; + var opts; + var out; + var x; + var v; + + opts = { + 'dtype': 'float64' + }; + + x = new Float64Array([ + 1.0, // 3 + 2.0, + 2.0, // 2 + -7.0, + -2.0, // 1 + 3.0, + 4.0, // 0 + 2.0 + ]); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, 4, -2, 6 ), vector( out, 2, 1, 0 ), correction ] ); + expected = new Float64Array( [ 1.25, 2.5 ] ); + t.deepEqual( getData( v ), expected, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports one-dimensional ndarrays having non-zero offsets', function test( t ) { + var correction; + var expected; + var opts; + var out; + var x; + var v; + + opts = { + 'dtype': 'float64' + }; + + x = new Float64Array([ + 2.0, + 1.0, // 0 + 2.0, + -2.0, // 1 + -2.0, + 2.0, // 2 + 3.0, + 4.0 // 3 + ]); + out = new Float64Array( 2 ); + correction = scalar2ndarray( 1.0, opts ); + + v = dmeanstdev( [ vector( x, 4, 2, 1 ), vector( out, 2, 1, 0 ), correction ] ); + expected = new Float64Array( [ 1.25, 2.5 ] ); + t.deepEqual( getData( v ), expected, 'returns expected value' ); - v = dmeanstdev( [ vector( x, 0, 1, 0 ), vector( out, 2, 1, 0 ) ] ); - t.strictEqual( isnan( v[ 0 ] ), true, 'mean is NaN' ); t.end(); }); From d1ca3f6592c918a32dd893cf50fe976599dfaf27 Mon Sep 17 00:00:00 2001 From: Sachin Pangal Date: Fri, 14 Nov 2025 23:24:23 +0530 Subject: [PATCH 13/13] fix: lint --- .../base/ndarray/dmeanstdev/docs/types/test.ts | 10 +++++++++- .../stats/base/ndarray/dmeanstdev/lib/index.js | 14 ++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts index c4869663913f..4da71429a28d 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/docs/types/test.ts @@ -19,6 +19,7 @@ /* eslint-disable space-in-parens */ import zeros = require( '@stdlib/ndarray/zeros' ); // eslint-disable-line import/no-unresolved +import scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); // eslint-disable-line import/no-unresolved import dmeanstdev = require( './index' ); // eslint-disable-line import/no-unresolved @@ -32,8 +33,11 @@ import dmeanstdev = require( './index' ); // eslint-disable-line import/no-unres const out = zeros( [ 2 ], { 'dtype': 'float64' }); + const correction = scalar2ndarray( 1.0, { + 'dtype': 'float64' + }); - dmeanstdev( [ x, out ] ); // $ExpectType ndarray + dmeanstdev( [ x, out, correction ] ); // $ExpectType ndarray } // The compiler throws an error if the function is provided a first argument which is not an array of ndarrays... @@ -57,7 +61,11 @@ import dmeanstdev = require( './index' ); // eslint-disable-line import/no-unres const out = zeros( [ 2 ], { 'dtype': 'float64' }); + const correction = scalar2ndarray( 1.0, { + 'dtype': 'float64' + }); dmeanstdev(); // $ExpectError dmeanstdev( [ x, out ], {} ); // $ExpectError + dmeanstdev( [ x, out ] ); // $ExpectError } diff --git a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js index 776c9991244a..43172d82c2a7 100644 --- a/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js +++ b/lib/node_modules/@stdlib/stats/base/ndarray/dmeanstdev/lib/index.js @@ -25,15 +25,21 @@ * * @example * var Float64Array = require( '@stdlib/array/float64' ); +* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); * var ndarray = require( '@stdlib/ndarray/base/ctor' ); * var dmeanstdev = require( '@stdlib/stats/base/ndarray/dmeanstdev' ); * +* var opts = { +* 'dtype': 'float64' +* }; +* * var xbuf = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] ); -* var x = new ndarray( 'float64', xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); -* var out = new ndarray( 'float64', new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* var x = new ndarray( opts.dtype, xbuf, [ 4 ], [ 2 ], 1, 'row-major' ); +* var out = new ndarray( opts.dtype, new Float64Array( 2 ), [ 2 ], [ 1 ], 0, 'row-major' ); +* var correction = scalar2ndarray( 1.0, opts ); * -* var v = dmeanstdev( [ x, out ] ); -* // returns [ 1.25, 2.5 ] +* var v = dmeanstdev( [ x, out, correction ] ); +* // returns */ // MODULES //