Socket
Book a DemoInstallSign in
Socket

ndarray-band

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ndarray-band

Create a view of a band of an ndarray

latest
Source
npmnpm
Version
1.0.14
Version published
Maintainers
1
Created
Source

ndarray-band

Build Status npm version Dependency Status

Create a view of a band of an ndarray

Introduction

First things first, if bands are meaningful in your matrix problem, there's a chance you should really just be dealing with the bands directly using algorithms designed to work with, for example, tridiagonal or Toeplitz matrices. But if you need a band, then this module provides a convenience function to extract a view of a band, i.e. a diagonal with an offset.

Note that for an ndarray of dimension d, since the band is a one-dimensional array, only d-1 offsets are necessary. Thus, the offsets are given for dimensions 1, 2, \ldots, d-1.

Also note that for dimensions greater than two, this gets a little confusing. Here's a more precise specification that's not exactly less confusing, but at least it's precise: Given an array A and offsets \mathrm{offset}_1, \mathrm{offset}_2, ..., \mathrm{offset}_{d-1}, ndarray-band returns a view of A at

A(\mathrm{offset}_1 + i_1 + i, \mathrm{offset}_2 + i_1 + i,\; \ldots,\;\mathrm{offset}_{d-1} + i_1 + i, i_1 + i)

where i_1 is the the first element that falls within the bounds of A and i is the index of the view starting at zero. The length of the band will be such that it only ever contains element within the bounds of A.

To make that actually concrete, the bands of a 3 \times 4 matrix are indexed like:

\left[ \begin{array}{cccc}
c_0 & d_0 & e_0 & f_0 \\
b_0 & c_1 & d_1 & e_1 \\
a_0 & b_1 & c_2 & d_2
\end{array}\right]

Example

Consider constructing the 10 \times 10 1-D discrete Laplacian operator. Of course in any realistic problem you'd obviously want to avoid constructing this at all costs, but there are cases where it's necessary or at least useful to refer to a band view.

var pool = require('ndarray-scratch'),
    ops = require('ndarray-ops'),
    band = require('ndarray-band')

var A = pool.zeros([10,10])

ops.assigns( band(A,-1),  1 )  // (superdiagonal)
ops.assigns( band(A, 0), -2 )  // (diagonal)
ops.assigns( band(A, 1),  1 )  // (subdiagonal)

//        [ -2    1    0    0    0    0    0    0    0    0 ]
//        [  1   -2    1    0    0    0    0    0    0    0 ]
//        [  0    1   -2    1    0    0    0    0    0    0 ]
//        [  0    0    1   -2    1    0    0    0    0    0 ]
//  A  =  [  0    0    0    1   -2    1    0    0    0    0 ]
//        [  0    0    0    0    1   -2    1    0    0    0 ]
//        [  0    0    0    0    0    1   -2    1    0    0 ]
//        [  0    0    0    0    0    0    1   -2    1    0 ]
//        [  0    0    0    0    0    0    0    1   -2    1 ]
//        [  0    0    0    0    0    0    0    0    1   -2 ]

Install

$ npm install ndarray-band

API

require('ndarray-band')( A, offsets )

Create a view of a band of an ndarray given offsets along the dimensions.

  • A: the ndarray of dimension d of which to create a view
  • offsets: an array of length d-1 containing the offset of the band along the respective dimensions. For the special case d = 1, the band is equal to the original vector so the offset is unused. For the special case d = 2, there is only one offset so a scalar is permitted in place of an array.

Returns: a 1-D ndarray starting at element 0 and of whatever length required such that the view will never contain an element outside the original ndarray.

Credits

(c) 2015 Ricky Reusser. MIT License

Keywords

scijs

FAQs

Package last updated on 27 Jul 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts