https://github.com/bionanoimaging/separablefunctions.jl

Calculates multidimensional functions faster by exploiting their separability.

https://github.com/bionanoimaging/separablefunctions.jl

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Committers with academic emails
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (11.9%) to scientific vocabulary

Keywords from Contributors

fft arrays fourier imageprocessing interpolation numerics deconvolution microscopy
Last synced: 11 months ago · JSON representation

Repository

Calculates multidimensional functions faster by exploiting their separability.

Basic Info
  • Host: GitHub
  • Owner: bionanoimaging
  • License: mit
  • Language: Julia
  • Default Branch: main
  • Size: 479 KB
Statistics
  • Stars: 6
  • Watchers: 6
  • Forks: 0
  • Open Issues: 1
  • Releases: 5
Created almost 4 years ago · Last pushed about 1 year ago
Metadata Files
Readme License

README.md

SeparableFunctions.jl

| Documentation | Build Status | Code Coverage | |:---------------------------------------:|:-----------------------------------------:|:-------------------------------:| | | | |

Calculates multidimensional functions faster by exploiting their separability. Often a function involves an operation such as a (complex) exponential which by itself is computationally relatively heavy. Yet a number of multidimenstional functions are separable, which means that they can be written as a product (or sum) of single-dimensional functions. A good example of a separable function is a Gaussian function:

$G(x)=e^{\frac{\mathbf{r}-\mathbf{r0}}{\sqrt{2}\sigma}}=e^{-(\frac{rx -x0}{\sqrt{2}\sigmax})^2} e^{-(\frac{ry-y0}{\sqrt{2}\sigmax})^2} e^{-(\frac{rz-z0}{\sqrt{2}\sigmaz})^2}$

In this package, multidimensional functions are computed by first calculating their single-dimensional values and then creating the final multidimensional result by an outer product. Since multiplications and the broadcasting mechanism of Julia are fast compared to the evaluation of the function at each multidimensional position, the final result is calculated faster. The typical speedup can be an order of magnitude.

The package offers a general way of calculating separable functions as well as a LazyArrays version of that function which can then be used inside other expressions. Yet, these lazy versions are currently NOT recommended, since they are consistently slower that the separabel implementations. This is why the specific versions are currently also not exported.

The non-lazy version should currently also work with CUDA.jl, however the LazyArrays version does not. To nevertheless use separable expressions in CUDA.jl, you can reside to externally applying the broadcast operator to the separable expression (see the gaussian_sep example below).

The package further offers a number of predifined separable function implementations such as gaussian_col() collects a multidimensional array of a multidimensional Gaussian via a fast seperable implementation, gaussian_lz() yields a lazy representation via LazyArrays and sep = gaussian_sep() yields a broadcasted type, which behaves like an array, if used in an expression, but hast not yet been expanded to a full-sized array (recommended mode of using the package).

Another noteworthy example is the complex plain wave as represented by the respective function exp_ikx_col(), exp_ikx_lz(), exp_ikx_sep().

All separable functions share a common interface with Standard non-named arguments + the first optional argument being the type of the result array. Examples are Array{Float64}, CuArray{Float32} and the default depends on the function but uses a 32-bit result type where applicable. + the next argument is the size of the result data supplied as a tuple. + optionally a further argument can specify the position of zero of the array with respect to offset as given below. This allows for convenient N-dimensional shifting of the functions. Named arguments: + offset: is a optional named argument specifying center of the array. By default the Fourier center, size().\div2 .+ 1 is chosen. + scale: multiplies the axes with these factors. This can be interpreted as a pixelsize. Some functions have additional named arguments. E.g. gaussian has the additional named argument sigma specifying the width of the gaussian, even though this can also be controlled via scale. Note that this nomenclature is in large parts identical to the package IndexFunArrays.jl.

In general arguments can be supplied as single scalar values or vectors. If a scalar value is supplied, it will automatically be replicated as a vector. E.g. sigma=10.0 for a 2-dimensional array will be interpreted as sigma=(10.0, 10.0).

Owner

  • Name: Nanoimaging at the IPHT Leibniz Institut Jena
  • Login: bionanoimaging
  • Kind: organization
  • Location: Jena, Germany

GitHub Events

Total
  • Create event: 4
  • Commit comment event: 11
  • Release event: 3
  • Issue comment event: 9
  • Push event: 9
Last Year
  • Create event: 4
  • Commit comment event: 11
  • Release event: 3
  • Issue comment event: 9
  • Push event: 9

Committers

Last synced: about 1 year ago

All Time
  • Total Commits: 117
  • Total Committers: 3
  • Avg Commits per committer: 39.0
  • Development Distribution Score (DDS): 0.094
Past Year
  • Commits: 48
  • Committers: 1
  • Avg Commits per committer: 48.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
RainerHeintzmann h****n@g****m 106
Felix Wechsler (he/him) f****t@m****g 6
CompatHelper Julia c****y@j****g 5
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 12 months ago

All Time
  • Total issues: 4
  • Total pull requests: 7
  • Average time to close issues: 18 days
  • Average time to close pull requests: 2 months
  • Total issue authors: 2
  • Total pull request authors: 3
  • Average comments per issue: 4.75
  • Average comments per pull request: 0.0
  • Merged pull requests: 7
  • Bot issues: 0
  • Bot pull requests: 5
Past Year
  • Issues: 0
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: about 2 hours
  • Issue authors: 0
  • Pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 0.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • roflmaostc (3)
  • JuliaTagBot (1)
Pull Request Authors
  • github-actions[bot] (5)
  • RainerHeintzmann (1)
  • roflmaostc (1)
Top Labels
Issue Labels
Pull Request Labels

Packages

  • Total packages: 1
  • Total downloads:
    • julia 2 total
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 6
juliahub.com: SeparableFunctions

Calculates multidimensional functions faster by exploiting their separability.

  • Versions: 6
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 2 Total
Rankings
Dependent repos count: 9.9%
Average: 24.4%
Dependent packages count: 38.9%
Last synced: 11 months ago

Dependencies

.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-docdeploy releases/v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/CompatHelper.yml actions