Skip to content

Latest commit

 

History

History
273 lines (177 loc) · 6.54 KB

File metadata and controls

273 lines (177 loc) · 6.54 KB

zsum

Compute the sum of all elements in a one-dimensional double-precision complex floating-point ndarray.

Usage

var zsum = require( '@stdlib/blas/ext/base/ndarray/zsum' );

zsum( arrays )

Computes the sum of all elements in a one-dimensional double-precision complex floating-point ndarray.

var Complex128Array = require( '@stdlib/array/complex128' );
var ndarray = require( '@stdlib/ndarray/base/ctor' );

var xbuf = new Complex128Array( [ 1.0, 3.0, 4.0, 2.0 ] );
var x = new ndarray( 'complex128', xbuf, [ 2 ], [ 1 ], 0, 'row-major' );

var v = zsum( [ x ] );
// returns <Complex128>[ 5.0, 5.0 ]

The function has the following parameters:

  • arrays: array-like object containing a one-dimensional input ndarray.

Notes

  • If provided an empty one-dimensional ndarray, the function returns 0.0 + 0.0i.

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var Complex128Array = require( '@stdlib/array/complex128' );
var ndarray = require( '@stdlib/ndarray/base/ctor' );
var ndarray2array = require( '@stdlib/ndarray/to-array' );
var zsum = require( '@stdlib/blas/ext/base/ndarray/zsum' );

var xbuf = discreteUniform( 10, -50, 50, {
    'dtype': 'float64'
});
xbuf = new Complex128Array( xbuf );

var x = new ndarray( 'complex128', xbuf, [ xbuf.length ], [ 1 ], 0, 'row-major' );
console.log( ndarray2array( x ) );

var v = zsum( [ x ] );
console.log( v );

C APIs

Usage

#include "stdlib/blas/ext/base/ndarray/zsum.h"

stdlib_blas_ext_zsum( arrays )

Computes the sum of all elements in a one-dimensional double-precision complex floating-point ndarray.

#include "stdlib/complex/float64/ctor.h"
#include "stdlib/ndarray/ctor.h"
#include "stdlib/ndarray/dtypes.h"
#include "stdlib/ndarray/index_modes.h"
#include "stdlib/ndarray/orders.h"
#include "stdlib/ndarray/base/bytes_per_element.h"
#include "stdlib/complex/float64/real.h"
#include "stdlib/complex/float64/imag.h"
#include <stdint.h>

// Create an ndarray:
const double data[] = { 1.0, 2.0, 3.0, 4.0 };
int64_t shape[] = { 2 };
int64_t strides[] = { STDLIB_NDARRAY_COMPLEX128_BYTES_PER_ELEMENT };
int8_t submodes[] = { STDLIB_NDARRAY_INDEX_ERROR };

struct ndarray *x = stdlib_ndarray_allocate( STDLIB_NDARRAY_COMPLEX128, (uint8_t *)data, 1, shape, strides, 0, STDLIB_NDARRAY_ROW_MAJOR, STDLIB_NDARRAY_INDEX_ERROR, 1, submodes );

// Compute the sum:
const struct ndarray *arrays[] = { x };
stdlib_complex128_t v = stdlib_blas_ext_zsum( arrays );

double re = stdlib_complex128_real( v );
// returns 4.0

double im = stdlib_complex128_imag( v );
// returns 6.0

// Free allocated memory:
stdlib_ndarray_free( x );

The function accepts the following arguments:

  • arrays: [in] struct ndarray** list containing a one-dimensional input ndarray.
stdlib_complex128_t stdlib_blas_ext_zsum( const struct ndarray *arrays[] );

Examples

#include "stdlib/blas/ext/base/ndarray/zsum.h"
#include "stdlib/complex/float64/ctor.h"
#include "stdlib/complex/float64/real.h"
#include "stdlib/complex/float64/imag.h"
#include "stdlib/ndarray/ctor.h"
#include "stdlib/ndarray/dtypes.h"
#include "stdlib/ndarray/index_modes.h"
#include "stdlib/ndarray/orders.h"
#include "stdlib/ndarray/base/bytes_per_element.h"
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>

int main( void ) {
    // Create a data buffer:
    const double data[] = { 1.0, -2.0, 3.0, -4.0, 5.0, -6.0, 7.0, -8.0 };

    // Specify the number of array dimensions:
    const int64_t ndims = 1;

    // Specify the array shape:
    int64_t shape[] = { 4 };

    // Specify the array strides:
    int64_t strides[] = { STDLIB_NDARRAY_COMPLEX128_BYTES_PER_ELEMENT };

    // Specify the byte offset:
    const int64_t offset = 0;

    // Specify the array order:
    const enum STDLIB_NDARRAY_ORDER order = STDLIB_NDARRAY_ROW_MAJOR;

    // Specify the index mode:
    const enum STDLIB_NDARRAY_INDEX_MODE imode = STDLIB_NDARRAY_INDEX_ERROR;

    // Specify the subscript index modes:
    int8_t submodes[] = { STDLIB_NDARRAY_INDEX_ERROR };
    const int64_t nsubmodes = 1;

    // Create an ndarray:
    struct ndarray *x = stdlib_ndarray_allocate( STDLIB_NDARRAY_COMPLEX128, (uint8_t *)data, ndims, shape, strides, offset, order, imode, nsubmodes, submodes );
    if ( x == NULL ) {
        fprintf( stderr, "Error allocating memory.\n" );
        exit( 1 );
    }

    // Define a list of ndarrays:
    const struct ndarray *arrays[] = { x };

    // Compute the sum:
    stdlib_complex128_t v = stdlib_blas_ext_zsum( arrays );

    // Print the result:
    printf( "sum: %lf + %lfi\n", stdlib_complex128_real( v ), stdlib_complex128_imag( v ) );

    // Free allocated memory:
    stdlib_ndarray_free( x );
}