Package Exports
- @stdlib/array-complex128
- @stdlib/array-complex128/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@stdlib/array-complex128) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Complex128Array
128-bit complex number array.
Installation
npm install @stdlib/array-complex128Usage
var Complex128Array = require( '@stdlib/array-complex128' );Complex128Array()
Creates a 128-bit complex number array.
var arr = new Complex128Array();
// returns <Complex128Array>Complex128Array( length )
Creates a 128-bit complex number array having a specified length.
var arr = new Complex128Array( 10 );
// returns <Complex128Array>
var len = arr.length;
// returns 10Complex128Array( complexarray )
Creates a 128-bit complex number array from another complex number array.
var arr1 = new Complex128Array( [ 1.0, -1.0, 2.0, -2.0 ] ); // [ re, im, re, im ]
// returns <Complex128Array>
var arr2 = new Complex128Array( arr1 );
// returns <Complex128Array>
var len = arr2.length;
// returns 2Complex128Array( typedarray )
Creates a 128-bit complex number array from a typed array containing interleaved real and imaginary components.
var Float64Array = require( '@stdlib/array-float64' );
var buf = new Float64Array( [ 1.0, -1.0, 2.0, -2.0 ] ); // [ re, im, re, im ]
// returns <Float64Array>[ 1.0, -1.0, 2.0, -2.0 ]
var arr = new Complex128Array( buf );
// returns <Complex128Array>
var len = arr.length;
// returns 2Complex128Array( obj )
Creates a 128-bit complex number array from an array-like object or iterable.
var Complex128 = require( '@stdlib/complex-float64' );
// From an array of interleaved real and imaginary components:
var arr1 = new Complex128Array( [ 1.0, -1.0, 2.0, -2.0 ] );
// returns <Complex128Array>
var len = arr1.length;
// returns 2
// From an array containing complex numbers:
var buf = [ new Complex128( 1.0, -1.0 ), new Complex128( 2.0, -2.0 ) ];
var arr2 = new Complex128Array( buf );
len = arr2.length;
// returns 2Complex128Array( buffer[, byteOffset[, length]] )
Returns a 128-bit complex number array view of an ArrayBuffer.
var ArrayBuffer = require( '@stdlib/array-buffer' );
var buf = new ArrayBuffer( 480 );
var arr1 = new Complex128Array( buf );
// returns <Complex128Array>
var len = arr1.length;
// returns 30
var arr2 = new Complex128Array( buf, 16 );
// returns <Complex128Array>
len = arr2.length;
// returns 29
var arr3 = new Complex128Array( buf, 16, 20 );
// returns <Complex128Array>
len = arr3.length;
// returns 20Properties
Complex128Array.BYTES_PER_ELEMENT
Static property returning the size (in bytes) of each array element.
var nbytes = Complex128Array.BYTES_PER_ELEMENT;
// returns 16Complex128Array.name
Static property returning the constructor name.
var str = Complex128Array.name;
// returns 'Complex128Array'Complex128Array.prototype.buffer
Pointer to the underlying data buffer.
var arr = new Complex128Array( 2 );
// returns <Complex128Array>
var buf = arr.buffer;
// returns <ArrayBuffer>Complex128Array.prototype.byteLength
Size (in bytes) of the array.
var arr = new Complex128Array( 10 );
// returns <Complex128Array>
var nbytes = arr.byteLength;
// returns 160Complex128Array.prototype.byteOffset
Offset (in bytes) of the array from the start of its underlying ArrayBuffer.
var ArrayBuffer = require( '@stdlib/array-buffer' );
var arr = new Complex128Array( 10 );
// returns <Complex128Array>
var offset = arr.byteOffset;
// returns 0
var buf = new ArrayBuffer( 480 );
arr = new Complex128Array( buf, 128 );
// returns <Complex128Array>
offset = arr.byteOffset;
// returns 128Complex128Array.prototype.BYTES_PER_ELEMENT
Size (in bytes) of each array element.
var arr = new Complex128Array( 10 );
// returns <Complex128Array>
var nbytes = arr.BYTES_PER_ELEMENT;
// returns 16Complex128Array.prototype.length
Number of array elements.
var arr = new Complex128Array( 10 );
// returns <Complex128Array>
var len = arr.length;
// returns 10Methods
Complex128Array.from( src[, clbk[, thisArg]] )
Creates a new 128-bit complex number array from an array-like object or an iterable.
var Complex128 = require( '@stdlib/complex-float64' );
// Create an array from interleaved real and imaginary components:
var arr = Complex128Array.from( [ 1.0, -1.0 ] );
// returns <Complex128Array>
var len = arr.length;
// returns 1
// Create an array from an array of complex numbers:
arr = Complex128Array.from( [ new Complex128( 1.0, -1.0 ) ] );
// returns <Complex128Array>
len = arr.length;
// returns 1The iterator returned by an iterable must return either a complex number or an array-like object containing a real and imaginary component.
var ITERATOR_SYMBOL = require( '@stdlib/symbol-iterator' );
var Float64Array = require( '@stdlib/array-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var iter;
var arr;
var len;
var re;
var im;
var z;
// Define a function which returns an iterator protocol-compliant object...
function iterable() {
var buf = new Float64Array( 2 );
var i = 0;
return {
'next': next
};
function next() {
i += 1;
if ( i < 3 ) {
// Reuse allocated memory...
buf[ 0 ] = i;
buf[ 1 ] = -i;
return {
'value': buf
};
}
return {
'done': true
};
}
}
if ( ITERATOR_SYMBOL === null ) {
console.error( 'Environment does not support iterables.' );
} else {
// Create an iterable:
iter = {};
iter[ ITERATOR_SYMBOL ] = iterable;
// Generate a complex number array:
arr = Complex128Array.from( iter );
// returns <Complex128Array>
len = arr.length;
// returns 2
z = arr.get( 0 );
// returns <Complex128>
re = real( z );
// returns 1.0
im = imag( z );
// returns -1.0
}To invoke a function for each src value, provide a callback function. If src is an iterable or an array-like object containing complex numbers, the callback must return either a complex number
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
function map( z ) {
return new Complex128( real(z)*2.0, imag(z)*2.0 );
}
// Create a source array:
var src = [ new Complex128( 1.0, -1.0 ) ];
// Create a new complex number array by scaling the source array:
var arr = Complex128Array.from( src, map );
// returns <Complex128Array>
var len = arr.length;
// returns 1
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 2.0
var im = imag( z );
// returns -2.0or an array-like object containing real and imaginary components
var Float64Array = require( '@stdlib/array-float64' );
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
// Return a callback which reuses allocated memory...
function mapFcn() {
var buf = new Float64Array( 2 );
return map;
function map( z ) {
buf[ 0 ] = real( z ) * 2.0;
buf[ 1 ] = imag( z ) * 2.0;
return buf;
}
}
// Create a source array:
var src = [ new Complex128( 1.0, -1.0 ), new Complex128( 2.0, -2.0 ) ];
// Create a new complex number array by scaling the source array:
var arr = Complex128Array.from( src, mapFcn() );
// returns <Complex128Array>
var len = arr.length;
// returns 2
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 2.0
var im = imag( z );
// returns -2.0
z = arr.get( 1 );
// returns <Complex128>
re = real( z );
// returns 4.0
im = imag( z );
// returns -4.0If src is an array-like object containing interleaved real and imaginary components, the callback is invoked for each component and should return the transformed component value.
var Float64Array = require( '@stdlib/array-float64' );
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
function map( v ) {
return v * 2.0;
}
// Create a source array:
var src = new Float64Array( [ 1.0, -1.0 ] );
// Create a new complex number array by scaling the source array:
var arr = Complex128Array.from( src, map );
// returns <Complex128Array>
var len = arr.length;
// returns 1
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 2.0
var im = imag( z );
// returns -2.0A callback function is provided two arguments:
- value: source value.
- index: source index.
To set the callback execution context, provide a thisArg.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
function map( z ) {
this.count += 1;
return new Complex128( real(z)*2.0, imag(z)*2.0 );
}
// Create a source array:
var src = [ new Complex128( 1.0, -1.0 ), new Complex128( 1.0, -1.0 ) ];
// Define an execution context:
var ctx = {
'count': 0
};
// Create a new complex number array by scaling the source array:
var arr = Complex128Array.from( src, map, ctx );
// returns <Complex128Array>
var len = arr.length;
// returns 2
var n = ctx.count;
// returns 2Complex128Array.of( element0[, element1[, ...elementN]] )
Creates a new 128-bit complex number array from a variable number of arguments.
var Complex128 = require( '@stdlib/complex-float64' );
var arr = Complex128Array.of( 1.0, -1.0, 2.0, -2.0 );
// returns <Complex128Array>
var len = arr.length;
// returns 2
var z1 = new Complex128( 1.0, -1.0 );
var z2 = new Complex128( 2.0, -2.0 );
arr = Complex128Array.of( z1, z2 );
// returns <Complex128Array>
len = arr.length;
// returns 2Complex128Array.prototype.copyWithin( target, start[, end] )
Copies a sequence of elements within the array starting at start and ending at end (non-inclusive) to the position starting at target.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 4 );
// Set the array elements:
arr.set( new Complex128( 1.0, -1.0 ), 0 );
arr.set( new Complex128( 2.0, -2.0 ), 1 );
arr.set( new Complex128( 3.0, -3.0 ), 2 );
arr.set( new Complex128( 4.0, -4.0 ), 3 );
// Get the first array element:
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 1.0
var im = imag( z );
// returns -1.0
// Get the second array element:
z = arr.get( 1 );
// returns <Complex128>
re = real( z );
// returns 2.0
im = imag( z );
// returns -2.0
// Copy the last two elements to the first two elements:
arr.copyWithin( 0, 2 );
// Get the first array element:
z = arr.get( 0 );
// returns <Complex128>
re = real( z );
// returns 3.0
im = imag( z );
// returns -3.0
// Get the second array element:
z = arr.get( 1 );
// returns <Complex128>
re = real( z );
// returns 4.0
im = imag( z );
// returns -4.0By default, end equals the number of array elements (i.e., one more than the last array index). To limit the sequence length, provide an end argument.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 4 );
// Set the array elements:
arr.set( new Complex128( 1.0, -1.0 ), 0 );
arr.set( new Complex128( 2.0, -2.0 ), 1 );
arr.set( new Complex128( 3.0, -3.0 ), 2 );
arr.set( new Complex128( 4.0, -4.0 ), 3 );
// Get the third array element:
var z = arr.get( 2 );
// returns <Complex128>
var re = real( z );
// returns 3.0
var im = imag( z );
// returns -3.0
// Get the last array element:
z = arr.get( 3 );
// returns <Complex128>
re = real( z );
// returns 4.0
im = imag( z );
// returns -4.0
// Copy the first two elements to the last two elements:
arr.copyWithin( 2, 0, 2 );
// Get the third array element:
z = arr.get( 2 );
// returns <Complex128>
re = real( z );
// returns 1.0
im = imag( z );
// returns -1.0
// Get the last array element:
z = arr.get( 3 );
// returns <Complex128>
re = real( z );
// returns 2.0
im = imag( z );
// returns -2.0When a target, start, and/or end index is negative, the respective index is determined relative to the last array element. The following example achieves the same behavior as the previous example:
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 4 );
// Set the array elements:
arr.set( new Complex128( 1.0, -1.0 ), 0 );
arr.set( new Complex128( 2.0, -2.0 ), 1 );
arr.set( new Complex128( 3.0, -3.0 ), 2 );
arr.set( new Complex128( 4.0, -4.0 ), 3 );
// Get the third array element:
var z = arr.get( 2 );
// returns <Complex128>
var re = real( z );
// returns 3.0
var im = imag( z );
// returns -3.0
// Get the last array element:
z = arr.get( 3 );
// returns <Complex128>
re = real( z );
// returns 4.0
im = imag( z );
// returns -4.0
// Copy the first two elements to the last two elements using negative indices:
arr.copyWithin( -2, -4, -2 );
// Get the third array element:
z = arr.get( 2 );
// returns <Complex128>
re = real( z );
// returns 1.0
im = imag( z );
// returns -1.0
// Get the last array element:
z = arr.get( 3 );
// returns <Complex128>
re = real( z );
// returns 2.0
im = imag( z );
// returns -2.0Complex128Array.prototype.entries()
Returns an iterator for iterating over array key-value pairs.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = [
new Complex128( 1.0, -1.0 ),
new Complex128( 2.0, -2.0 ),
new Complex128( 3.0, -3.0 )
];
arr = new Complex128Array( arr );
// Create an iterator:
var it = arr.entries();
// Iterate over the key-value pairs...
var v = it.next().value;
// returns [ 0, <Complex128> ]
var re = real( v[ 1 ] );
// returns 1.0
var im = imag( v[ 1 ] );
// returns -1.0
v = it.next().value;
// returns [ 1, <Complex128> ]
re = real( v[ 1 ] );
// returns 2.0
im = imag( v[ 1 ] );
// returns -2.0
v = it.next().value;
// returns [ 2, <Complex128> ]
re = real( v[ 1 ] );
// returns 3.0
im = imag( v[ 1 ] );
// returns -3.0
var bool = it.next().done;
// returns trueComplex128Array.prototype.get( i )
Returns an array element located at position (index) i.
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 10 );
// Set the first element:
arr.set( [ 1.0, -1.0 ], 0 );
// Get the first element:
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 1.0
var im = imag( z );
// returns -1.0If provided an out-of-bounds index, the method returns undefined.
var arr = new Complex128Array( 10 );
var z = arr.get( 100 );
// returns undefinedComplex128Array.prototype.set( z[, i] )
Sets one or more array elements.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 10 );
// Get the first element:
var z = arr.get( 0 );
// returns <Complex128>
var re = real( z );
// returns 0.0
var im = imag( z );
// returns 0.0
// Set the first element:
arr.set( new Complex128( 1.0, -1.0 ) );
// Get the first element:
z = arr.get( 0 );
// returns <Complex128>
re = real( z );
// returns 1.0
im = imag( z );
// returns -1.0By default, the method sets array elements starting at position (index) i = 0. To set elements starting elsewhere in the array, provide an index argument i.
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 10 );
// Get the fifth element:
var z = arr.get( 4 );
// returns <Complex128>
var re = real( z );
// returns 0.0
var im = imag( z );
// returns 0.0
// Set the fifth element:
arr.set( new Complex128( 1.0, -1.0 ), 4 );
// Get the fifth element:
z = arr.get( 4 );
// returns <Complex128>
re = real( z );
// returns 1.0
im = imag( z );
// returns -1.0In addition to providing a complex number, to set one or more array elements, provide an array-like object containing either complex numbers
var Complex128 = require( '@stdlib/complex-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 10 );
// Define an array of complex numbers:
var buf = [
new Complex128( 1.0, -1.0 ),
new Complex128( 2.0, -2.0 ),
new Complex128( 3.0, -3.0 )
];
// Set the fifth, sixth, and seventh elements:
arr.set( buf, 4 );
// Get the sixth element:
var z = arr.get( 5 );
// returns <Complex128>
var re = real( z );
// returns 2.0
var im = imag( z );
// returns -2.0or interleaved real and imaginary components
var Float64Array = require( '@stdlib/array-float64' );
var real = require( '@stdlib/complex-real' );
var imag = require( '@stdlib/complex-imag' );
var arr = new Complex128Array( 10 );
// Define an interleaved array of real and imaginary components:
var buf = new Float64Array( [ 1.0, -1.0, 2.0, -2.0, 3.0, -3.0 ] );
// Set the fifth, sixth, and seventh elements:
arr.set( buf, 4 );
// Get the sixth element:
var z = arr.get( 5 );
// returns <Complex128>
var re = real( z );
// returns 2.0
var im = imag( z );
// returns -2.0A few notes:
- If
iis out-of-bounds, the method throws an error. - If a target array cannot accommodate all values (i.e., the length of source array plus
iexceeds the target array length), the method throws an error. - If provided a typed array which shares an
ArrayBufferwith the target array, the method will intelligently copy the source range to the destination range.
Notes
While a
Complex128Arraystrives to maintain (but does not guarantee) consistency with typed arrays, significant deviations from ECMAScript-defined typed array behavior are as follows:- The constructor does not require the
newoperator. - The constructor and associated methods support a broader variety of input argument types in order to better accommodate complex number input.
- Accessing array elements using bracket syntax (e.g.,
Z[i]) is not supported. Instead, one must use the.get()method which returns a value compatible with complex number output. - The
setmethod has extended behavior in order to support complex numbers.
- The constructor does not require the
Examples
var Complex128 = require( '@stdlib/complex-float64' );
var Float64Array = require( '@stdlib/array-float64' );
var Complex128Array = require( '@stdlib/array-complex128' );
// Create a complex array by specifying a length:
var out = new Complex128Array( 3 );
console.log( out );
// Create a complex array from an array of complex numbers:
var arr = [
new Complex128( 1.0, -1.0 ),
new Complex128( -3.14, 3.14 ),
new Complex128( 0.5, 0.5 )
];
out = new Complex128Array( arr );
console.log( out );
// Create a complex array from an interleaved typed array:
arr = new Float64Array( [ 1.0, -1.0, -3.14, 3.14, 0.5, 0.5 ] );
out = new Complex128Array( arr );
console.log( out );
// Create a complex array from an array buffer:
arr = new Float64Array( [ 1.0, -1.0, -3.14, 3.14, 0.5, 0.5 ] );
out = new Complex128Array( arr.buffer );
console.log( out );
// Create a complex array from an array buffer view:
arr = new Float64Array( [ 1.0, -1.0, -3.14, 3.14, 0.5, 0.5 ] );
out = new Complex128Array( arr.buffer, 16, 2 );
console.log( out );Notice
This package is part of stdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.
For more information on the project, filing bug reports and feature requests, and guidance on how to develop stdlib, see the main project repository.
Community
License
See LICENSE.
Copyright
Copyright © 2016-2022. The Stdlib Authors.