Create a view of a band of an ndarray
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
, since the band is a one-dimensional array, only
offsets are necessary. Thus, the offsets are given for dimensions
.
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
and offsets
,
, ...,
, ndarray-band returns a view of
at
![]()
where
is the the first element that falls within the bounds of
and
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
.
To make that actually concrete, the bands of a
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]](docs/images/left-beginarraycccc-c_0-d_0-e_0-f_0-b_0-c_1-d-0158dede7b.png)
Consider constructing the
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 ]
$ npm install ndarray-band
require('ndarray-band')( A, offsets )Create a view of a band of an ndarray given offsets along the dimensions.
A: the ndarray of dimension offsets: an array of length 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.
(c) 2015 Ricky Reusser. MIT License