https://github.com/rs-coop/randnla.jl
Julia algorithms for randomized numerical linear algebra.
https://github.com/rs-coop/randnla.jl
julia linear-algebra randomized-algorithms
Last synced: 9 days ago
JSON representation
Julia algorithms for randomized numerical linear algebra.
- Host: GitHub
- URL: https://github.com/rs-coop/randnla.jl
- Owner: RS-Coop
- License: mit
- Created: 2023-06-27T16:39:26.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-01-02T19:04:39.000Z (over 2 years ago)
- Last Synced: 2025-09-05T03:47:36.052Z (10 months ago)
- Topics: julia, linear-algebra, randomized-algorithms
- Language: Julia
- Homepage:
- Size: 14.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
README
# RandNLA.jl: Randomized algorithms for numerical linear algebra
### Author: [Cooper Simpson](https://rs-coop.github.io/)
RandNLA.jl is a pure julia package for fundamental operations and state-of-the-art research. The core is lightweight, but a variety of extensions allow for easy plug-and-play use in other packages. This is still very much a work in progress, and a full roadmap is given in [Roadmap](#roadmap).
## License & Citation
All source code is made available under an MIT license. You can freely use and modify the code, without warranty, so long as you provide attribution to the authors. See `LICENSE` for the full text.
This repository can be cited using the GitHub action in the sidebar, or using the metadata in `CITATION.cff`.
## Features
- AbstractFloat support?
- GPU support?
- Sparse support?
- Complex support?
## Installation
This package can be installed just like any other Julia package. From the terminal, after starting the Julia REPL, run the following:
```julia
julia> ]
pkg> add RandNLA
```
### Testing
To test the package, run the following command in the REPL:
```julia
using Pkg
Pkg.test(test_args=[])
```
## Usage
Load the package as usual:
```julia
using RandNLA
```
## Design Principles
1. Provide a consolidated suite of algorithms, both well established and state of the art
2. Interface nicely with other Julia linear algebra packages such as [Krylov.jl](https://github.com/JuliaSmoothOptimizers/Krylov.jl)
3. Leverage Julia to provide efficient implementations while staying adaptable and updateable
### References
#### Papers
- [RandNLA Survery](https://arxiv.org/abs/2302.11474)
#### Julia Packages
- [RandomizedLinAlg.jl](https://github.com/JuliaLinearAlgebra/RandomizedLinAlg.jl)
- Last updated early 2021
- [RandNLA.jl](https://github.com/matsumotosan/RandNLA.jl)
- Last updated mid 2022
- [RandomLinearAlgebraSolvers.jl](https://github.com/tmigot/RandomLinearAlgebraSolvers.jl)
- Last updated late 2021
- [Randomized Preconditioners.jl](https://github.com/tjdiamandis/RandomizedPreconditioners.jl)
#### Python Packages
- [PARLA](https://github.com/BallisticLA/parla)
- Continuously updated
- [PyRLA: Randomized Linear Algebra in Python](https://github.com/wangshusen/PyRLA)
- Last updated 2017
- [RandNLA](https://github.com/positiveblue/randNLA)
- Last updated 2017
#### C++ Pacakges
- [RandLAPACK](https://github.com/BallisticLA/RandLAPACK)
- Continuously updated
- [RandBLAS](https://github.com/BallisticLA/RandBLAS)
- Continuously updated
## Roadmap
1. Basic Sketching
- Agnostic to RNG, i.e. use `AbstractRNG` type
- Left vs. right sketching
- Explicit vs implicit, i.e. is the sketching opeartor realized
- Dense sketching operators
- Rademacher
- Uniform
- Gaussian
- Haar
- Can allow for abitrary distribution as well
- Methods for constructing these distributions?
- Sparse sketching opeartors
- Short-axis
- Long-axis
- iid
2. Property estimation
- Trace
- Norm
3. Decompositions
- SVD
- Nystrom (positive definite and indefinite)
- ID
- CUR
4. Advanced Sketching
- Leverage-score sampling
5. Advanced algorithms
- Randomized finite differences