Coder Social home page Coder Social logo

ndarray-stencil's Introduction

ndarray-stencil

Stencil iterators for ndarrays. This code can be used to implement things like cellular automata or various PDE operations on ndarrays.

Example

var zeros = require("zeros")

var points = [[-1, 0], [1, 0], [0,-1], [0, 1]]

var diffuse = require("ndarray-stencil")(points, function(a, b, c, d) {
  return 0.25 * (a + b + c + d)
})

var x = zeros([5,5])
var y = zeros([5,5])

x.set(2,2,1)

diffuse(y, x)

//Now:
//
// y =[ [ 0, 0,    0,    0,    0 ],
//      [ 0, 0,    0.25, 0,    0 ],
//      [ 0, 0.25, 0,    0.25, 0 ],
//      [ 0, 0,    0.25, 0,    0 ],
//      [ 0, 0,    0,    0,    0 ] ]

Install

npm install ndarray-stencil

require("ndarray-stencil")(points, stencil_func[, options])

Creates a stencil operator for an ndarray.

  • points is a list of points that the stencil will be evaluated on
  • stencil_func(...) is a function that takes in n arguments, where n is the number points to evaluate the stencil on, and returns the new value of the grid on the given point.
  • options is an object containing a list of optional properties:
    • useIndex If this flag is set, add an extra index parameter as the last argument to stencil_func. (Default false)
    • sameOutput if set, then the output is not sliced and instead the result of the stencil operation is applied directly to output

Returns A function that applies the stencil to two arrays. The first argument is the output array, and the second is the input.

Credits

(c) 2013 Mikola Lysenko. MIT License

ndarray-stencil's People

Contributors

mikolalysenko avatar

Stargazers

Michael Anthony avatar Kyle Robinson Young avatar Hugh Kennedy avatar

Watchers

 avatar Dmitry Iv. avatar Hugh Kennedy avatar James Cloos avatar Michael Anthony avatar Athan avatar  avatar

Forkers

hughsk

ndarray-stencil's Issues

Mixing ndarray-proxy and ndarray-stencil

I ended up taking the proxy approach for combining ndarrays, but bumped into an issue when applying ndarray-stencil to a proxy. Specifically, I managed to track the problem down to creating new instances of the array in the generated _stencil_wrapper, e.g.:

var out_c = out.constructor
var inp_c = inp.constructor

func(
  new out_c(
    out_d,
    nshape,
    out_s,
    out_o + out_s[0] + out_s[1] | 0
  ),
  new inp_c(
      inp_d
    , nshape
    , inp_s
    , inp_o | 0
  )
)

This works fine with a normal ndarray, but in my case I end up getting an empty proxy. Would you have any ideas on how to work around the issue, either by changing one of the modules or my own code?

Thanks again :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.