npy
npy allows to read and write files in NPY npy and [NPZ] npy formats on the JVM.
Installation
The latest version of npy is available on [Maven Central] maven-central. If you're using Gradle just add the following to your build.gradle:
repositories {
mavenCentral()
}
dependencies {
compile 'org.jetbrains.bio:npy:0.3.5'
}
With Maven, specify the following in your pom.xml:
<dependency>
<groupId>org.jetbrains.bio</groupId>
<artifactId>npy</artifactId>
<version>0.3.5</version>
</dependency>
The previous versions were published on Bintray. They can be downloaded from GitHub Releases.
Examples
NPY
val values = intArrayOf(1, 2, 3, 4, 5, 6)
val path = Paths.get("sample.npy")
NpyFile.write(path, values, shape = intArrayOf(2, 3))
println(NpyFile.read(path))
// => NpyArray{data=[1, 2, 3, 4, 5, 6], shape=[2, 3]}
NPZ
val values1 = intArrayOf(1, 2, 3, 4, 5, 6)
val values2 = booleanArrayOf(true, false)
val path = Paths.get("sample.npz")
NpzFile.write(path).use {
it.write("xs", values1, shape = intArrayOf(2, 3))
it.write("mask", values2)
}
NpzFile.read(path).use {
println(it.introspect())
// => [NpzEntry{name=xs, type=int, shape=[2, 3]},
// NpzEntry{name=mask, type=boolean, shape=[2]}]
println("xs = ${it["xs"]}")
println("mask = ${it["mask"]}")
// => xs = NpyArray{data=[1, 2, 3, 4, 5, 6], shape=[2, 3]}
// mask = NpyArray{data=[true, false], shape=[2]}
}
Limitations
The implementation is rather minimal at the moment. Specifically it does not support the following types:
- unsigned integral types (treated as signed),
- bit field,
- complex,
- object,
- Unicode
- void*
- intersections aka types for structured arrays.
Building from source
The build process is as simple as
$ ./gradlew jar
Note: don't use ./gradlew assemble, since it includes the signing of the artifacts and will fail if the correct credentials are not provided.
Testing
No extra configuration is required for running the tests from Gradle
$ ./gradlew test
However, some tests require Python and NumPy to run and will be skipped unless you have these.