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.