In the last two posts I introduced ndarrays, and explained the rationale and implementation details of the library. In this post I am going to show a few of the libraries that I have written using ndarrays. All of this code works in both node.js and within any browser that supports typed arrays. You can run the demos directly in node.js or else test them out in a browser using a bundler like browserify. You can click on the links for each of them to find out more details about a specific module.

Vector arithmetic

cwise: Array operation meta-programming library

ndarray-ops: Common array operations

ndarray-complex: Array operations for complex numbers

Image processing

get-pixels: Reads the pixels from an image as an ndarray

save-pixels: Writes a 2D ndarray to an image file

lena: The Lena test image as a require()able commonjs module.

luminance: Converts an rgb image into luminance.

normalize: Scales an ndarray to mean 0 and standard deviation 1

ndarray-warp: Apply a non-linear warp to an ndarray

Fourier analysis

ndarray-fft: Fast fourier transform for ndarrays

ndarray-convolve: Convolutions and correlations for ndarrays

phase-align: Pattern matching and alignment

ndarray-translate-fft: Phase shifts an ndarray

Morphology and miscellaneous stuff

ndarray-pack: Convert a numeric.js array to an ndarray

ndarray-moments: Calculate first few terms of moment generating function

distance-transform: Fast distance transforms

ball-morphology: Mathematical morphology with ball-shaped structuring elements

Conclusions

This list is by no means exhaustive, and I have been writing more modules as I need them. One of the nice things about working with CommonJS modules is that it is pretty straight forward to create your own module on npm, and reuse its functionality. I think that this style of programming could make building large scientific computing projects like SciPy/NumPy much more manageable. Each function in such a project could be decomposed into a separate module, and it would be easy to experiment with different implementations.

