Skip to content

Commit 1db2bc8

Browse files
Revert "feat: add C ndarray interface and refactor implementation"
This reverts commit 15831b8.
1 parent 15831b8 commit 1db2bc8

24 files changed

+258
-457
lines changed

lib/node_modules/@stdlib/stats/base/dnanvariance/README.md

Lines changed: 30 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ The use of the term `n-1` is commonly referred to as Bessel's correction. Note,
9898
var dnanvariance = require( '@stdlib/stats/base/dnanvariance' );
9999
```
100100

101-
#### dnanvariance( N, correction, x, strideX )
101+
#### dnanvariance( N, correction, x, stride )
102102

103-
Computes the [variance][variance] of a double-precision floating-point strided array ignoring `NaN` values.
103+
Computes the [variance][variance] of a double-precision floating-point strided array `x` ignoring `NaN` values.
104104

105105
```javascript
106106
var Float64Array = require( '@stdlib/array/float64' );
@@ -116,38 +116,41 @@ The function has the following parameters:
116116
- **N**: number of indexed elements.
117117
- **correction**: degrees of freedom adjustment. Setting this parameter to a value other than `0` has the effect of adjusting the divisor during the calculation of the [variance][variance] according to `n-c` where `c` corresponds to the provided degrees of freedom adjustment and `n` corresponds to the number of non-`NaN` indexed elements. When computing the [variance][variance] of a population, setting this parameter to `0` is the standard choice (i.e., the provided array contains data constituting an entire population). When computing the unbiased sample [variance][variance], setting this parameter to `1` is the standard choice (i.e., the provided array contains data sampled from a larger population; this is commonly referred to as Bessel's correction).
118118
- **x**: input [`Float64Array`][@stdlib/array/float64].
119-
- **strideX**: stride length for `x`.
119+
- **stride**: index increment for `x`.
120120

121-
The `N` and stride parameters determine which elements in the strided array are accessed at runtime. For example, to compute the [variance][variance] of every other element in `x`,
122-
123-
<!-- eslint-disable max-len -->
121+
The `N` and `stride` parameters determine which elements in `x` are accessed at runtime. For example, to compute the [variance][variance] of every other element in `x`,
124122

125123
```javascript
126124
var Float64Array = require( '@stdlib/array/float64' );
125+
var floor = require( '@stdlib/math/base/special/floor' );
127126

128-
var x = new Float64Array( [ 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0, NaN, NaN ] );
127+
var x = new Float64Array( [ 1.0, 2.0, 2.0, -7.0, -2.0, 3.0, 4.0, 2.0, NaN ] );
128+
var N = floor( x.length / 2 );
129129

130-
var v = dnanvariance( 5, 1, x, 2 );
130+
var v = dnanvariance( N, 1, x, 2 );
131131
// returns 6.25
132132
```
133133

134134
Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views.
135135

136-
<!-- eslint-disable stdlib/capitalized-comments, max-len -->
136+
<!-- eslint-disable stdlib/capitalized-comments -->
137137

138138
```javascript
139139
var Float64Array = require( '@stdlib/array/float64' );
140+
var floor = require( '@stdlib/math/base/special/floor' );
140141

141-
var x0 = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ] );
142+
var x0 = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN ] );
142143
var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
143144

144-
var v = dnanvariance( 5, 1, x1, 2 );
145+
var N = floor( x0.length / 2 );
146+
147+
var v = dnanvariance( N, 1, x1, 2 );
145148
// returns 6.25
146149
```
147150

148-
#### dnanvariance.ndarray( N, correction, x, strideX, offsetX )
151+
#### dnanvariance.ndarray( N, correction, x, stride, offset )
149152

150-
Computes the [variance][variance] of a double-precision floating-point strided array, ignoring `NaN` values and using alternative indexing semantics.
153+
Computes the [variance][variance] of a double-precision floating-point strided array ignoring `NaN` values and using alternative indexing semantics.
151154

152155
```javascript
153156
var Float64Array = require( '@stdlib/array/float64' );
@@ -160,18 +163,18 @@ var v = dnanvariance.ndarray( x.length, 1, x, 1, 0 );
160163

161164
The function has the following additional parameters:
162165

163-
- **offsetX**: starting index for `x`.
166+
- **offset**: starting index for `x`.
164167

165168
While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying `buffer`, the `offset` parameter supports indexing semantics based on a starting index. For example, to calculate the [variance][variance] for every other value in `x` starting from the second value
166169

167-
<!-- eslint-disable max-len -->
168-
169170
```javascript
170171
var Float64Array = require( '@stdlib/array/float64' );
172+
var floor = require( '@stdlib/math/base/special/floor' );
171173

172-
var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, NaN, NaN ] );
174+
var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
175+
var N = floor( x.length / 2 );
173176

174-
var v = dnanvariance.ndarray( 5, 1, x, 2, 1 );
177+
var v = dnanvariance.ndarray( N, 1, x, 2, 1 );
175178
// returns 6.25
176179
```
177180

@@ -197,19 +200,18 @@ var v = dnanvariance.ndarray( 5, 1, x, 2, 1 );
197200
<!-- eslint no-undef: "error" -->
198201

199202
```javascript
200-
var uniform = require( '@stdlib/random/base/uniform' );
201-
var filledarrayBy = require( '@stdlib/array/filled-by' );
202-
var bernoulli = require( '@stdlib/random/base/bernoulli' );
203+
var randu = require( '@stdlib/random/base/randu' );
204+
var round = require( '@stdlib/math/base/special/round' );
205+
var Float64Array = require( '@stdlib/array/float64' );
203206
var dnanvariance = require( '@stdlib/stats/base/dnanvariance' );
204207

205-
function rand() {
206-
if ( bernoulli( 0.8 ) < 1 ) {
207-
return NaN;
208-
}
209-
return uniform( -50.0, 50.0 );
210-
}
208+
var x;
209+
var i;
211210

212-
var x = filledarrayBy( 10, 'float64', rand );
211+
x = new Float64Array( 10 );
212+
for ( i = 0; i < x.length; i++ ) {
213+
x[ i ] = round( (randu()*100.0) - 50.0 );
214+
}
213215
console.log( x );
214216

215217
var v = dnanvariance( x.length, 1, x, 1 );
@@ -220,125 +222,6 @@ console.log( v );
220222

221223
<!-- /.examples -->
222224

223-
<!-- C interface documentation. -->
224-
225-
* * *
226-
227-
<section class="c">
228-
229-
## C APIs
230-
231-
<!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
232-
233-
<section class="intro">
234-
235-
</section>
236-
237-
<!-- /.intro -->
238-
239-
<!-- C usage documentation. -->
240-
241-
<section class="usage">
242-
243-
### Usage
244-
245-
```c
246-
#include "stdlib/stats/base/dnanvariance.h"
247-
```
248-
249-
#### stdlib_strided_dnanvariance( N, correction, \*X, strideX )
250-
251-
Computes the [variance][variance] of a double-precision floating-point strided array, ignoring `NaN` values.
252-
253-
```c
254-
const double x[] = { 1.0, -2.0, 0.0/0.0, 2.0 };
255-
256-
double v = stdlib_strided_dnanvariance( 4, 1.0, x, 1 );
257-
// returns ~4.3333
258-
```
259-
260-
The function accepts the following arguments:
261-
262-
- **N**: `[in] CBLAS_INT` number of indexed elements.
263-
- **correction**: `[in] double` degrees of freedom adjustment. Setting this parameter to a value other than `0` has the effect of adjusting the divisor during the calculation of the [variance][variance] according to `n-c` where `c` corresponds to the provided degrees of freedom adjustment and `n` corresponds to the number of non-`NaN` indexed elements. When computing the [variance][variance] of a population, setting this parameter to `0` is the standard choice (i.e., the provided array contains data constituting an entire population). When computing the unbiased sample [variance][variance], setting this parameter to `1` is the standard choice (i.e., the provided array contains data sampled from a larger population; this is commonly referred to as Bessel's correction).
264-
- **X**: `[in] double*` input array.
265-
- **strideX**: `[in] CBLAS_INT` stride length for `X`.
266-
267-
```c
268-
double stdlib_strided_dnanvariance( const CBLAS_INT N, const double correction, const double *X, const CBLAS_INT strideX );
269-
```
270-
271-
#### stdlib_strided_dnanvariance_ndarray( N, correction, \*X, strideX, offsetX )
272-
273-
Computes the [variance][variance] of a double-precision floating-point strided array, ignoring `NaN` values and alternative indexing semantics.
274-
275-
```c
276-
const double x[] = { 1.0, -2.0, 0.0/0.0, 2.0 };
277-
278-
double v = stdlib_strided_dnanvariance_ndarray( 4, 1.0, x, 1, 0 );
279-
// returns ~4.3333
280-
```
281-
282-
The function accepts the following arguments:
283-
284-
- **N**: `[in] CBLAS_INT` number of indexed elements.
285-
- **correction**: `[in] double` degrees of freedom adjustment. Setting this parameter to a value other than `0` has the effect of adjusting the divisor during the calculation of the [variance][variance] according to `n-c` where `c` corresponds to the provided degrees of freedom adjustment and `n` corresponds to the number of non-`NaN` indexed elements. When computing the [variance][variance] of a population, setting this parameter to `0` is the standard choice (i.e., the provided array contains data constituting an entire population). When computing the unbiased sample [variance][variance], setting this parameter to `1` is the standard choice (i.e., the provided array contains data sampled from a larger population; this is commonly referred to as Bessel's correction).
286-
- **X**: `[in] double*` input array.
287-
- **strideX**: `[in] CBLAS_INT` stride length for `X`.
288-
- **offsetX**: `[in] CBLAS_INT` starting index for `X`.
289-
290-
```c
291-
double stdlib_strided_dnanvariance_ndarray( const CBLAS_INT N, const double correction, const double *X, const CBLAS_INT strideX, const CBLAS_INT offsetX );
292-
```
293-
294-
</section>
295-
296-
<!-- /.usage -->
297-
298-
<!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
299-
300-
<section class="notes">
301-
302-
</section>
303-
304-
<!-- /.notes -->
305-
306-
<!-- C API usage examples. -->
307-
308-
<section class="examples">
309-
310-
### Examples
311-
312-
```c
313-
#include "stdlib/stats/base/dnanvariance.h"
314-
#include <stdio.h>
315-
316-
int main( void ) {
317-
// Create a strided array:
318-
const double x[] = { 1.0, 2.0, 0.0/0.0, 3.0, 0.0/0.0, 4.0, 5.0, 6.0, 0.0/0.0, 7.0, 8.0, 0.0/0.0 };
319-
320-
// Specify the number of elements:
321-
const int N = 6;
322-
323-
// Specify the stride length:
324-
const int strideX = 2;
325-
326-
// Compute the variance:
327-
double v = stdlib_strided_dnanvariance( N, 1.0, x, strideX );
328-
329-
// Print the result:
330-
printf( "sample variance: %lf\n", v );
331-
}
332-
```
333-
334-
</section>
335-
336-
<!-- /.examples -->
337-
338-
</section>
339-
340-
<!-- /.c -->
341-
342225
<section class="references">
343226

344227
</section>

lib/node_modules/@stdlib/stats/base/dnanvariance/benchmark/benchmark.js

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,16 @@
2121
// MODULES //
2222

2323
var bench = require( '@stdlib/bench' );
24-
var uniform = require( '@stdlib/random/base/uniform' );
25-
var bernoulli = require( '@stdlib/random/base/bernoulli' );
26-
var filledarrayBy = require( '@stdlib/array/filled-by' );
24+
var randu = require( '@stdlib/random/base/randu' );
2725
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2826
var pow = require( '@stdlib/math/base/special/pow' );
27+
var Float64Array = require( '@stdlib/array/float64' );
2928
var pkg = require( './../package.json' ).name;
3029
var dnanvariance = require( './../lib/dnanvariance.js' );
3130

3231

3332
// FUNCTIONS //
3433

35-
/**
36-
* Returns a random value or `NaN`.
37-
*
38-
* @private
39-
* @returns {number} random number or `NaN`
40-
*/
41-
function rand() {
42-
if ( bernoulli( 0.8 ) < 1 ) {
43-
return NaN;
44-
}
45-
return uniform( -10.0, 10.0 );
46-
}
47-
4834
/**
4935
* Creates a benchmark function.
5036
*
@@ -53,7 +39,17 @@ function rand() {
5339
* @returns {Function} benchmark function
5440
*/
5541
function createBenchmark( len ) {
56-
var x = filledarrayBy( len, 'float64', rand );
42+
var x;
43+
var i;
44+
45+
x = new Float64Array( len );
46+
for ( i = 0; i < x.length; i++ ) {
47+
if ( randu() < 0.2 ) {
48+
x[ i ] = NaN;
49+
} else {
50+
x[ i ] = ( randu()*20.0 ) - 10.0;
51+
}
52+
}
5753
return benchmark;
5854

5955
function benchmark( b ) {

lib/node_modules/@stdlib/stats/base/dnanvariance/benchmark/benchmark.native.js

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,10 @@
2222

2323
var resolve = require( 'path' ).resolve;
2424
var bench = require( '@stdlib/bench' );
25-
var uniform = require( '@stdlib/random/base/uniform' );
26-
var bernoulli = require( '@stdlib/random/base/bernoulli' );
27-
var filledarrayBy = require( '@stdlib/array/filled-by' );
25+
var randu = require( '@stdlib/random/base/randu' );
2826
var isnan = require( '@stdlib/math/base/assert/is-nan' );
2927
var pow = require( '@stdlib/math/base/special/pow' );
28+
var Float64Array = require( '@stdlib/array/float64' );
3029
var tryRequire = require( '@stdlib/utils/try-require' );
3130
var pkg = require( './../package.json' ).name;
3231

@@ -41,19 +40,6 @@ var opts = {
4140

4241
// FUNCTIONS //
4342

44-
/**
45-
* Returns a random value or `NaN`.
46-
*
47-
* @private
48-
* @returns {number} random number or `NaN`
49-
*/
50-
function rand() {
51-
if ( bernoulli( 0.8 ) < 1 ) {
52-
return NaN;
53-
}
54-
return uniform( -10.0, 10.0 );
55-
}
56-
5743
/**
5844
* Creates a benchmark function.
5945
*
@@ -62,7 +48,17 @@ function rand() {
6248
* @returns {Function} benchmark function
6349
*/
6450
function createBenchmark( len ) {
65-
var x = filledarrayBy( len, 'float64', rand );
51+
var x;
52+
var i;
53+
54+
x = new Float64Array( len );
55+
for ( i = 0; i < x.length; i++ ) {
56+
if ( randu() < 0.2 ) {
57+
x[ i ] = NaN;
58+
} else {
59+
x[ i ] = ( randu()*20.0 ) - 10.0;
60+
}
61+
}
6662
return benchmark;
6763

6864
function benchmark( b ) {

0 commit comments

Comments
 (0)