https://github.com/hohonuuli/scilube
Science libraries for Scala
https://github.com/hohonuuli/scilube
Last synced: 2 months ago
JSON representation
Science libraries for Scala
- Host: GitHub
- URL: https://github.com/hohonuuli/scilube
- Owner: hohonuuli
- Created: 2012-04-23T21:25:43.000Z (about 13 years ago)
- Default Branch: master
- Last Pushed: 2023-11-27T16:43:57.000Z (over 1 year ago)
- Last Synced: 2025-02-04T21:45:52.656Z (4 months ago)
- Language: Scala
- Homepage: http://hohonuuli.github.io/scilube
- Size: 2.18 MB
- Stars: 3
- Watchers: 5
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# scilube
A simple MATLAB-like DSL for working with numeric arrays.
## Adding to an SBT project
project/plugins.sbt:
```
addSbtPlugin("com.codecommit" %% "sbt-github-packages" % "0.5.2")
```Get a GitHub personal access token with `read:packages` scope. Set it to the `GITHUB_TOKEN` env variable.
```
resolvers += Resolver.githubPackages("mbari-org", "maven")
libraryDependencies += "org.mbari.scilube" %% "scilube" % "3.0.0"
```## Array extension methods
### `RichArray` extension methods allow array operations:
```
import org.mbari.scilibe3.RichArray // add implict element-by-element math functions to arraysval x = (1 to 10).map(_.toDouble).toArray
// x: Array[Double] = Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0)// --- Array operations
x * x
// res: Array[Double] = Array(1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0)x + x
// res: Array[Double] = Array(2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0)x / x
// res: Array[Double] = Array(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)x - x
// res: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)x.subset(0 until 3)
// res: Array[Double] = Array(1.0, 2.0, 3.0)x.subset(Seq(1, 4, 9))
// res: Array[Double] = Array(2.0, 5.0, 10.0)x.findIdx(_ < 3)
// res: Array[Int] = Array(0, 1)
```### `RichArray` extension methods allow scalar operations on arrays:
```
import org.mbari.scilibe3.RichArray // add implict element-by-element math functions to arraysval x = (1 to 10).map(_.toDouble).toArray
// x: Array[Double] = Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0)// --- Scalar ops
x * 2
// res: Array[Double] = Array(2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0)x + 10
// res: Array[Double] = Array(11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0)x / 2
// res: Array[Double] = Array(0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0)x - 10
// res: Array[Double] = Array(-9.0, -8.0, -7.0, -6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0)```
## MATLAB-like DSL ... `Matlib`
```
import org.mbari.scilibe3.RichArray// add implict element-by-element math functions to arrays
import org.mbari.scilube3.Matlib._ // Matlab-like DSLval x = (1 to 10).map(_.toDouble).toArray
// x: Array[Double] = Array(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0)val y = x * x
// y: Array[Double] = Array(1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0)corr(x, y) // Pearsons correlation
// res: Double = 0.9745586289152093corrcoef(x, y) // correlation
// res: Double = 0.08555369917386947cumsum(x)
// res: Array[Double] = Array(1.0, 3.0, 6.0, 10.0, 15.0, 21.0, 28.0, 36.0, 45.0, 55.0)diff(x) // difference between adjacent values
// res: Array[Double] = Array(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)dot(x, y) // vector dot product
// res: Double = 3025.0fft(x) // fast-Fourier transform
// res: Array[spire.math.Complex[Double]] = Array(
// Complex(55.0, 0.0),
// Complex(-5.000000000000002, 15.388417685876268),
// Complex(-4.9999999999999964, 6.881909602355868),
// Complex(-5.000000000000001, 3.6327126400268037),
// Complex(-4.9999999999999964, 1.6245984811645322),
// Complex(-4.999999999999998, 4.440892098500626E-16),
// Complex(-4.9999999999999964, -1.6245984811645322),
// Complex(-5.0, -3.632712640026805),
// Complex(-4.9999999999999964, -6.881909602355868),
// Complex(-4.999999999999999, -15.388417685876266)
// )fibonacci(123)
// res: BigInt = 22698374052006863956975682fix(1.987) // round towards zero
// res: Double = 1.0gcd(34, 51) // greatest common denominator
// res: Int = 17interp1(Array(1, 5, 10), // linear interpolation
Array(1, 5, 10),
Array(3,4,7))
// res: Array[Double] = Array(3.0, 4.0, 7.0)extrap1(Array(1, 5, 10), // linear extrapolation
Array(1, 5, 10),
Array(3, 5, 12))
// res: Array[Double] = Array(3.0, 5.0, 12.0)isprime(13421) // is it a prime number?
// res: Boolean = truelinspace(11, 20, 5) // linerarly-spaced points
// res: Array[Double] = Array(11.0, 13.25, 15.5, 17.75, 20.0)mad(x) // mean absolute deviation
// res: Array[Double] = Array(4.5, 3.5, 2.5, 1.5, 0.5, 0.5, 1.5, 2.5, 3.5, 4.5)mean(x)
// res: Double = 5.5median(x)
// res: Double = 5.5near(x, 3.2) // index of point nearest value
// res: Int = 2norm(x)
// res15: Double = 19.621416870348583prod(x)
// res16: Double = 3628800.0rem(13, 5) // remainder after division
// res17: Double = 3.0sign(9)
// res18: Int = 1sign(-9)
// res19: Int = -1std(x) // standard deviation
// res7: Double = 2.8722813232690143sum(x)
// res20: Double = 55.0trapz(x, y) // trapezoidal integration
// res5: Double = 334.5variance(x)
// res46: Double = 8.25
```__And more ...__
Documentation at [http://hohonuuli.github.io/scilube](http://hohonuuli.github.io/scilube)