Necessitates Proper Modularity
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

ndarray-band

1.0.14 • Public • Published

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

install

npm i ndarray-band

Downloadsweekly downloads

4

version

1.0.14

license

MIT

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
  • avatar
  • avatar
  • avatar
Report a vulnerability