https://github.com/bionanoimaging/separablefunctions.jl
Calculates multidimensional functions faster by exploiting their separability.
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
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
Metadata Files
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
- Website: nanoimaging.de
- Repositories: 33
- Profile: https://github.com/bionanoimaging
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
Top Committers
| Name | 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.
- Documentation: https://docs.juliahub.com/General/SeparableFunctions/stable/
- License: MIT
-
Latest release: 0.3.1
published about 1 year ago
Rankings
Dependencies
- JuliaRegistries/TagBot v1 composite
- 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