# cswap > Interchange two complex single-precision floating-point vectors.
## Usage ```javascript var cswap = require( '@stdlib/blas/base/cswap' ); ``` #### cswap( N, x, strideX, y, strideY ) Interchanges two complex single-precision floating-point vectors. ```javascript var Complex64Array = require( '@stdlib/array/complex64' ); var real = require( '@stdlib/complex/real' ); var imag = require( '@stdlib/complex/imag' ); var x = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var y = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); cswap( x.length, x, 1, y, 1 ); var z = y.get( 0 ); // returns var re = real( z ); // returns 1.0 var im = imag( z ); // returns 2.0 z = x.get( 0 ); // returns re = real( z ); // returns 0.0 im = imag( z ); // returns 0.0 ``` The function has the following parameters: - **N**: number of values to swap. - **x**: input [`Complex64Array`][@stdlib/array/complex64]. - **strideX**: index increment for `x`. - **y**: destination [`Complex64Array`][@stdlib/array/complex64]. - **strideY**: index increment for `y`. The `N` and `stride` parameters determine how values from `x` are interchanged with values from `y`. For example, to interchange in reverse order every other value in `x` into the first `N` elements of `y`, ```javascript var Complex64Array = require( '@stdlib/array/complex64' ); var floor = require( '@stdlib/math/base/special/floor' ); var real = require( '@stdlib/complex/real' ); var imag = require( '@stdlib/complex/imag' ); var x = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); var y = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); var N = floor( x.length / 2 ); cswap( N, x, -2, y, 1 ); var z = y.get( 0 ); // returns var re = real( z ); // returns 5.0 var im = imag( z ); // returns 6.0 z = x.get( 0 ); // returns re = real( z ); // returns 0.0 im = imag( z ); // returns 0.0 ``` Note that indexing is relative to the first index. To introduce an offset, use [`typed array`][mdn-typed-array] views. ```javascript var Complex64Array = require( '@stdlib/array/complex64' ); var floor = require( '@stdlib/math/base/special/floor' ); var real = require( '@stdlib/complex/real' ); var imag = require( '@stdlib/complex/imag' ); // Initial arrays... var x0 = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); var y0 = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); // Create offset views... var x1 = new Complex64Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element var y1 = new Complex64Array( y0.buffer, y0.BYTES_PER_ELEMENT*2 ); // start at 3rd element var N = floor( x0.length / 2 ); // Interchange in reverse order every other value from `x1` into `y1`... cswap( N, x1, -2, y1, 1 ); var z = y0.get( 2 ); // returns var re = real( z ); // returns 7.0 var im = imag( z ); // returns 8.0 z = x0.get( 1 ); // returns re = real( z ); // returns 0.0 im = imag( z ); // returns 0.0 ``` #### cswap.ndarray( N, x, strideX, offsetX, y, strideY, offsetY ) Interchanges two complex single-precision floating-point vectors using alternative indexing semantics. ```javascript var Complex64Array = require( '@stdlib/array/complex64' ); var real = require( '@stdlib/complex/real' ); var imag = require( '@stdlib/complex/imag' ); var x = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] ); var y = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); cswap.ndarray( x.length, x, 1, 0, y, 1, 0 ); var z = y.get( 0 ); // returns var re = real( z ); // returns 1.0 var im = imag( z ); // returns 2.0 z = x.get( 0 ); // returns re = real( z ); // returns 0.0 im = imag( z ); // returns 0.0 ``` The function has the following additional parameters: - **offsetX**: starting index for `x`. - **offsetY**: starting index for `y`. 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 interchange every other value in `x` starting from the second value into the last `N` elements in `y` where `x[i] = y[n]`, `x[i+2] = y[n-1]`,..., ```javascript var Complex64Array = require( '@stdlib/array/complex64' ); var floor = require( '@stdlib/math/base/special/floor' ); var real = require( '@stdlib/complex/real' ); var imag = require( '@stdlib/complex/imag' ); var x = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] ); var y = new Complex64Array( [ 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); var N = floor( x.length / 2 ); cswap.ndarray( N, x, 2, 1, y, -1, y.length-1 ); var z = y.get( y.length-1 ); // returns var re = real( z ); // returns 3.0 var im = imag( z ); // returns 4.0 z = x.get( x.length-1 ); // returns re = real( z ); // returns 0.0 im = imag( z ); // returns 0.0 ```
## Notes - If `N <= 0`, both functions leave `x` and `y` unchanged. - `cswap()` corresponds to the [BLAS][blas] level 1 function [`cswap`][cswap].
## Examples ```javascript var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ); var Complex64Array = require( '@stdlib/array/complex64' ); var cswap = require( '@stdlib/blas/base/cswap' ); var re = discreteUniform.factory( 0, 10 ); var im = discreteUniform.factory( -5, 5 ); var x = new Complex64Array( 10 ); var y = new Complex64Array( 10 ); var i; for ( i = 0; i < x.length; i++ ) { x.set( [ re(), im() ], i ); y.set( [ re(), im() ], i ); } console.log( x.get( 0 ).toString() ); console.log( y.get( 0 ).toString() ); // Swap elements in `x` and `y` starting from the end of `y`: cswap( x.length, x, 1, y, -1 ); console.log( x.get( x.length-1 ).toString() ); console.log( y.get( y.length-1 ).toString() ); ```