Skip to content

Inpaint `missing`, `NaN`, or other values in arrays with different methods

License

Notifications You must be signed in to change notification settings

briochemc/Inpaintings.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Inpaintings.jl

License: MIT

Description

This package provides a Julia version of MATLAB's inpaint_nans function (originally written by John d'Errico, available on the MathWorks File Exchange website and ported here with his authorization by personal communication).

Simply put, Inpaintings.jl provides a simple inpaint function, which takes an array A as input and inpaints its missing values by solving a simple n-dimensional PDE. The inpaint function can also be used to inpaint NaNs or any other values, thanks to the syntax described below and in the documentation.

Usage:

Like every Julia package you must first add it via ]add Inpaintings. And every time you want to use Inpaintings.jl, you must start with

julia> using Inpaintings

In order to inpaint an array A's missing values, simply apply inpaint to your array:

julia> inpaint(A) # will inpaint missing values

The array to be inpainted can be a vector, a matrix, or even an n-dimensional array.

If your array A has some NaN values and is filled with floats otherwise, then

julia> inpaint(A) # will inpaint NaN values

Inpaintings.jl provides a syntax to inpaint any specified value via

julia> inpaint(A, -999) # will inpaint -999 values

(The value to inpaint can be specified as NaN or missing, too!)

Alternatively, Inpaintings.jl also provides a syntax taking a boolean function f as an argument before the array (f will be applied to all the elements of the array and must return a boolean).

julia> inpaint(f, A)

In this case, the values of A for which f returns true will be inpainted. (For example, f can be, e.g., ismissing or isnan, but it can also be x -> x < 0.)

Finally, Inpaintings.jl provides a syntax to allow some dimensions to be assumed cyclic:

julia> inpaint(A, cycledims=[1]) # will inpaint A with dimension 1 as cyclic

(The cyclic dimensions must be an array of Int64 that contains the dimension number of cyclic dimensions.)

See the docs if you want to see more examples.

Comparison to MATLAB version

Out of the methods available in MATLAB's inpaint_nans, Inpaintings.jl currently only implements the following methods:

  • method 0
  • method 1
  • method 2
  • method 3
  • method 4
  • method 5

In the future, it is likely that only inpaint_nans's method 4 (the spring analogy) will be additionally implemented.

TODOs

Suggestions, ideas, issues, and PRs welcome!

  • improve efficiency
  • Julian-ify the code
  • Add notebook exampls via Literate.jl

About

Inpaint `missing`, `NaN`, or other values in arrays with different methods

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages