time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

README.md (5474B)


      1 <!--
      2 
      3 @license Apache-2.0
      4 
      5 Copyright (c) 2020 The Stdlib Authors.
      6 
      7 Licensed under the Apache License, Version 2.0 (the "License");
      8 you may not use this file except in compliance with the License.
      9 You may obtain a copy of the License at
     10 
     11    http://www.apache.org/licenses/LICENSE-2.0
     12 
     13 Unless required by applicable law or agreed to in writing, software
     14 distributed under the License is distributed on an "AS IS" BASIS,
     15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 See the License for the specific language governing permissions and
     17 limitations under the License.
     18 
     19 -->
     20 
     21 # dswap
     22 
     23 > Interchange two double-precision floating-point vectors.
     24 
     25 <section class="usage">
     26 
     27 ## Usage
     28 
     29 ```javascript
     30 var dswap = require( '@stdlib/blas/base/dswap' );
     31 ```
     32 
     33 #### dswap( N, x, strideX, y, strideY )
     34 
     35 Interchanges vectors `x` and `y`.
     36 
     37 ```javascript
     38 var Float64Array = require( '@stdlib/array/float64' );
     39 
     40 var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0 ] );
     41 var y = new Float64Array( [ 6.0, 7.0, 8.0, 9.0, 10.0 ] );
     42 
     43 dswap( x.length, x, 1, y, 1 );
     44 // x => <Float64Array>[ 6.0, 7.0, 8.0, 9.0, 10.0 ]
     45 // y => <Float64Array>[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
     46 ```
     47 
     48 The function has the following parameters:
     49 
     50 -   **N**: number of values to swap.
     51 -   **x**: first input [`Float64Array`][mdn-float64array].
     52 -   **strideX**: index increment for `x`.
     53 -   **y**: second input [`Float64Array`][mdn-float64array].
     54 -   **strideY**: index increment for `y`.
     55 
     56 The `N` and `stride` parameters determine how values from `x` and `y` are accessed at runtime. For example, to swap in reverse order every other value in `x` with the first `N` elements of `y`,
     57 
     58 ```javascript
     59 var Float64Array = require( '@stdlib/array/float64' );
     60 
     61 var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
     62 var y = new Float64Array( [ 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );
     63 
     64 dswap( 3, x, -2, y, 1 );
     65 // x => <Float64Array>[ 9.0, 2.0, 8.0, 4.0, 7.0, 6.0 ]
     66 // y => <Float64Array>[ 5.0, 3.0, 1.0, 10.0, 11.0, 12.0 ]
     67 ```
     68 
     69 Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views.
     70 
     71 <!-- eslint-disable stdlib/capitalized-comments -->
     72 
     73 ```javascript
     74 var Float64Array = require( '@stdlib/array/float64' );
     75 
     76 // Initial arrays...
     77 var x0 = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
     78 var y0 = new Float64Array( [ 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );
     79 
     80 // Create offset views...
     81 var x1 = new Float64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
     82 var y1 = new Float64Array( y0.buffer, y0.BYTES_PER_ELEMENT*3 ); // start at 4th element
     83 
     84 // Swap in reverse order every other value from `x1` with `y1`...
     85 dswap( 3, x1, -2, y1, 1 );
     86 // x0 => <Float64Array>[ 1.0, 12.0, 3.0, 11.0, 5.0, 10.0 ]
     87 // y0 => <Float64Array>[ 7.0, 8.0, 9.0, 6.0, 4.0, 2.0 ]
     88 ```
     89 
     90 #### dswap.ndarray( N, x, strideX, offsetX, y, strideY, offsetY )
     91 
     92 Interchanges vectors `x` and `y` using alternative indexing semantics.
     93 
     94 ```javascript
     95 var Float64Array = require( '@stdlib/array/float64' );
     96 
     97 var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0 ] );
     98 var y = new Float64Array( [ 6.0, 7.0, 8.0, 9.0, 10.0 ] );
     99 
    100 dswap.ndarray( x.length, x, 1, 0, y, 1, 0 );
    101 // x => <Float64Array>[ 6.0, 7.0, 8.0, 9.0, 10.0 ]
    102 // y => <Float64Array>[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
    103 ```
    104 
    105 The function has the following additional parameters:
    106 
    107 -   **offsetX**: starting index for `x`.
    108 -   **offsetY**: starting index for `y`.
    109 
    110 While [`typed array`][mdn-typed-array] views mandate a view offset based on the underlying `buffer`, the `offsetX` and `offsetY` parameters support indexing semantics based on starting indices. For example, to swap every other value in `x` starting from the second value with the last `N` elements in `y` where `x[i] = y[n]`, `x[i+2] = y[n-1]`,...,
    111 
    112 ```javascript
    113 var Float64Array = require( '@stdlib/array/float64' );
    114 
    115 var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
    116 var y = new Float64Array( [ 7.0, 8.0, 9.0, 10.0, 11.0, 12.0 ] );
    117 
    118 dswap.ndarray( 3, x, 2, 1, y, -1, y.length-1 );
    119 // x => <Float64Array>[ 1.0, 12.0, 3.0, 11.0, 5.0, 10.0 ]
    120 // y => <Float64Array>[ 7.0, 8.0, 9.0, 6.0, 4.0, 2.0 ]
    121 ```
    122 
    123 </section>
    124 
    125 <!-- /.usage -->
    126 
    127 <section class="notes">
    128 
    129 ## Notes
    130 
    131 -   If `N <= 0`, both functions leave `x` and `y` unchanged.
    132 -   `dswap()` corresponds to the [BLAS][blas] level 1 function [`dswap`][dswap].
    133 
    134 </section>
    135 
    136 <!-- /.notes -->
    137 
    138 <section class="examples">
    139 
    140 ## Examples
    141 
    142 <!-- eslint no-undef: "error" -->
    143 
    144 ```javascript
    145 var randu = require( '@stdlib/random/base/randu' );
    146 var round = require( '@stdlib/math/base/special/round' );
    147 var Float64Array = require( '@stdlib/array/float64' );
    148 var dswap = require( '@stdlib/blas/base/dswap' );
    149 
    150 var x;
    151 var y;
    152 var i;
    153 
    154 x = new Float64Array( 10 );
    155 y = new Float64Array( 10 );
    156 for ( i = 0; i < x.length; i++ ) {
    157     x[ i ] = round( randu()*500.0 );
    158     y[ i ] = round( randu()*255.0 );
    159 }
    160 console.log( x );
    161 console.log( y );
    162 
    163 // Swap elements in `x` and `y` starting from the end of `y`:
    164 dswap( x.length, x, 1, y, -1 );
    165 console.log( x );
    166 console.log( y );
    167 ```
    168 
    169 </section>
    170 
    171 <!-- /.examples -->
    172 
    173 <section class="links">
    174 
    175 [blas]: http://www.netlib.org/blas
    176 
    177 [dswap]: http://www.netlib.org/lapack/explore-html/de/da4/group__double__blas__level1.html
    178 
    179 [mdn-float64array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float64Array
    180 
    181 [mdn-typed-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
    182 
    183 </section>
    184 
    185 <!-- /.links -->