Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add array/base/take-map #1349

Merged
merged 24 commits into from
Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
199641d
Added new example for namespace packages
vr-varad Feb 21, 2024
dd5797f
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
2190f7f
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
3a60341
Merge branch 'develop' of https://github.com/vr-varad/stdlib into dev…
vr-varad Feb 22, 2024
51ab57e
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
7a45086
Added new newspace examples
vr-varad Feb 23, 2024
7214304
added new feature@stdlib/array/base/take-map
vr-varad Feb 23, 2024
7e69c54
All test ok
vr-varad Feb 23, 2024
862542a
made changes
vr-varad Feb 24, 2024
b912605
Refined and checked
vr-varad Feb 24, 2024
8de51ed
fixed error in js examples
vr-varad Feb 24, 2024
98105ea
fixed error in readme and benchmarks
vr-varad Feb 24, 2024
8356c2f
resolved readme reference problem
vr-varad Feb 24, 2024
e958cad
changed according to the lint
vr-varad Feb 24, 2024
02c660c
changed according to the lint
vr-varad Feb 24, 2024
88427f6
made some linting changes
vr-varad Feb 24, 2024
2ba043f
Merge branch 'stdlib-js:develop' into develop
vr-varad Feb 24, 2024
48be856
fix: resolved linting errors
vr-varad Feb 24, 2024
da8703e
fix: errors in ts and js files
vr-varad Feb 25, 2024
db18da9
fix: errors in ts and js files
vr-varad Feb 25, 2024
2a0c8d9
fix: added new clbks
vr-varad Feb 26, 2024
ef66eab
fix: resolved changes
vr-varad Feb 27, 2024
d9079fa
fix: made some changes
vr-varad Mar 2, 2024
e2aeb12
Apply suggestions from code review
Planeshifter Mar 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions lib/node_modules/@stdlib/array/base/take-map/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<!--

@license Apache-2.0

Copyright (c) 2024 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.

-->

# takeMap

> Take elements from an array and return a new array after applying a mapping function.

<section class="usage">

## Usage

```javascript
var takeMap = require( '@stdlib/array/base/take-map' );
```

### takeMap( x, indices, mode, clbk )

Takes elements from an array and returns a new array after applying a mapping function.

```javascript
var x = [ 1, 2, 3, 4 ];

function customMapping( value ) {
return value * 2;
}

var y = takeMap( x, [ 1, 3 ], 'throw', customMapping );
// returns [ 4, 8 ]
```

The function supports the following parameters:

- **x**: input array.
- **indices**: list of indices.
- **mode**: index [mode][@stdlib/ndarray/base/ind].
- **clbk**: function to apply.

vr-varad marked this conversation as resolved.
Show resolved Hide resolved
### takeMap.assign( x, indices, mode, out, stride, offset, clbk )

> Takes elements from an array and assigns the values to elements in a provided output array.

```javascript
var x = [ 1, 2, 3, 4 ];

var out = [ 0, 0, 0, 0, 0, 0 ];
var indices = [ 0, 0, 1, 1, 3, 3 ];

function clbk( val ) {
return val * 2;
}

var arr = takeMap.assign( x, indices, 'throw', out, -1, out.length-1, clbk );
// returns [ 8, 8, 4, 4, 2, 2 ]

var bool = ( arr === out );
// returns true
```

The function supports the following parameters:

- **x**: input array.
- **indices**: list of indices.
- **mode**: index [mode][@stdlib/ndarray/base/ind].
- **out**: output array.
- **stride**: output array stride.
- **offset**: output array offset.
- **clbk**: callback function.

</section>

<!-- /.usage -->

<section class="notes">

</section>

<!-- /.notes -->

<section class="examples">

## Examples

<!-- eslint no-undef: "error" -->

```javascript
var filledBy = require( '@stdlib/array/base/filled-by' );
var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var linspace = require( '@stdlib/array/base/linspace' );
var takeMap = require( '@stdlib/array/base/take-map' );

// Generate a linearly spaced array:
var x = linspace( 0, 100, 11 );
console.log( x );

// Generate an array of random indices:
var N = discreteUniform( 5, 15 );
var indices = filledBy( N, discreteUniform.factory( 0, x.length-1 ) );
console.log( indices );

// Define a mapping function (e.g., square the value):
function square( val ) {
return val * val;
}

// Take a random sample of elements from `x` and apply the mapping function:
var y = takeMap( x, indices, 'throw', square );
console.log( y );
```

</section>

<!-- /.examples -->

<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->

<section class="related">

</section>

<!-- /.related -->

<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->

<section class="links">

[@stdlib/ndarray/base/ind]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/ind

</section>

<!-- /.links -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2024 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 bench = require( '@stdlib/bench' );
var pow = require( '@stdlib/math/base/special/pow' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var zeros = require( '@stdlib/array/zeros' );
var isArray = require( '@stdlib/assert/is-array' );
var pkg = require( './../package.json' ).name;
var takeMap = require( './../lib' );


// FUNCTIONS //

/**
* Creates a benchmark function.
*
* @private
* @param {PositiveInteger} len - array length
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
var out;
var idx;

idx = discreteUniform( len, 0, 3, {
'dtype': 'generic'
});
out = zeros( len, 'generic' );

return benchmark;

/**
* Benchmark function.
*
* @private
* @param {Benchmark} b - benchmark instance
*/
function benchmark( b ) {
var x;
var v;
var i;

x = [ 1, 2, 3, 4 ];
function clbk( val ) {
return val;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = takeMap.assign( x, idx, 'throw', out, 1, 0, clbk );
if ( typeof v !== 'object' ) {
b.fail( 'should return an array' );
}
}
b.toc();
if ( !isArray( v ) ) {
b.fail( 'should return an array' );
}
b.pass( 'benchmark finished' );
b.end();
}
}


// MAIN //

/**
* Main execution sequence.
*
* @private
*/
function main() {
var len;
var min;
var max;
var f;
var i;

min = 1; // 10^min
max = 6; // 10^max

for ( i = min; i <= max; i++ ) {
len = pow( 10, i );
f = createBenchmark( len );
bench( pkg+':assign:len='+len, f );
}
}

main();
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2024 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 bench = require( '@stdlib/bench' );
var isArray = require( '@stdlib/assert/is-array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var pkg = require( './../package.json' ).name;
var takeMap = require( './../lib' );


// MAIN //

bench( pkg+'::copy:len=100', function benchmark( b ) {
var x;
var i;
var v;

x = zeroTo( 100 );

function clbk( val ) {
return val;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = takeMap( x, x, 'throw', clbk );
if ( typeof v !== 'object' ) {
b.fail( 'should return an array' );
}
}
b.toc();
if ( !isArray( v ) ) {
b.fail( 'should return an array' );
}
b.pass( 'benchmark finished' );
b.end();
});
Loading
Loading