Documentation
¶
Overview ¶
Package npyio provides read/write access to files following the NumPy data file format:
https://numpy.org/neps/nep-0001-npy-format.html
Supported types ¶
npyio supports r/w of scalars, arrays, slices and gonum/mat.Dense. Supported scalars are:
- bool,
- (u)int{8,16,32,64},
- float{32,64},
- complex{64,128}
Reading ¶
Reading from a NumPy data file can be performed like so:
f, err := os.Open("data.npy")
var m mat.Dense
err = npyio.Read(f, &m)
fmt.Printf("data = %v\n", mat.Formatted(&m, mat.Prefix(" "))))
npyio can also read data directly into slices, arrays or scalars, provided the on-disk data type and the provided one match.
Example:
var data []float64 err = npyio.Read(f, &data) var data uint64 err = npyio.Read(f, &data)
Writing ¶
Writing into a NumPy data file can be done like so:
f, err := os.Create("data.npy")
var m mat.Dense = ...
err = npyio.Write(f, m)
Scalars, arrays and slices are also supported:
var data []float64 = ... err = npyio.Write(f, data) var data int64 = 42 err = npyio.Write(f, data) var data [42]complex128 = ... err = npyio.Write(f, data)
Example (PartialRead) ¶
package main
import (
"fmt"
"log"
"os"
"github.com/sbinet/npyio"
)
func main() {
out, err := os.Create("data.npy")
if err != nil {
log.Fatal(err)
}
defer out.Close()
f := []float64{0, 1, 2, 3, 4, 5}
fmt.Printf("-- original data --\n")
fmt.Printf("data = %v\n", f)
err = npyio.Write(out, f)
if err != nil {
log.Fatalf("error writing data: %v\n", err)
}
err = out.Close()
if err != nil {
log.Fatal(err)
}
in, err := os.Open("data.npy")
if err != nil {
log.Fatal(err)
}
defer in.Close()
r, err := npyio.NewReader(in)
if err != nil {
log.Fatal(err)
}
data := make([]float64, 3)
err = r.Read(&data)
if err != nil {
log.Fatalf("error reading data: %v\n", err)
}
fmt.Printf("-- partial data read back --\n")
fmt.Printf("data = %v\n", data)
err = r.Read(&data)
if err != nil {
log.Fatalf("error reading data: %v\n", err)
}
fmt.Printf("-- rest of data read back --\n")
fmt.Printf("data = %v\n", data)
}
Output: -- original data -- data = [0 1 2 3 4 5] -- partial data read back -- data = [0 1 2] -- rest of data read back -- data = [3 4 5]
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrInvalidNumPyFormat is the error returned by NewReader when // the underlying io.Reader is not a valid or recognized NumPy data // file format. ErrInvalidNumPyFormat = npy.ErrInvalidNumPyFormat // ErrTypeMismatch is the error returned by Reader when the on-disk // data type and the user provided one do NOT match. ErrTypeMismatch = npy.ErrTypeMismatch // ErrInvalidType is the error returned by Reader and Writer when // confronted with a type that is not supported or can not be // reliably (de)serialized. ErrInvalidType = npy.ErrInvalidType // Magic header present at the start of a NumPy data file format. // See https://numpy.org/neps/nep-0001-npy-format.html Magic = npy.Magic )
Functions ¶
func Dump ¶ added in v0.4.0
Dump dumps the content of the provided reader to the writer, in a human readable format
func Read ¶
Read reads the data from the r NumPy data file io.Reader, into the provided pointed at value ptr. Read returns an error if the on-disk data type and the one provided don't match.
If a *mat.Dense matrix is passed to Read, the numpy-array data is loaded into the Dense matrix, honouring Fortran/C-order and dimensions/shape parameters.
Only numpy-arrays with up to 2 dimensions are supported. Only numpy-arrays with elements convertible to float64 are supported.
Example ¶
package main
import (
"bytes"
"fmt"
"log"
"gonum.org/v1/gonum/mat"
"github.com/sbinet/npyio"
)
func main() {
m := mat.NewDense(2, 3, []float64{0, 1, 2, 3, 4, 5})
fmt.Printf("-- original data --\n")
fmt.Printf("data = %v\n", mat.Formatted(m, mat.Prefix(" ")))
buf := new(bytes.Buffer)
err := npyio.Write(buf, m)
if err != nil {
log.Fatalf("error writing data: %v\n", err)
}
// modify original data
m.Set(0, 0, 6)
var data mat.Dense
err = npyio.Read(buf, &data)
if err != nil {
log.Fatalf("error reading data: %v\n", err)
}
fmt.Printf("-- data read back --\n")
fmt.Printf("data = %v\n", mat.Formatted(&data, mat.Prefix(" ")))
fmt.Printf("-- modified original data --\n")
fmt.Printf("data = %v\n", mat.Formatted(m, mat.Prefix(" ")))
}
Output: -- original data -- data = ⎡0 1 2⎤ ⎣3 4 5⎦ -- data read back -- data = ⎡0 1 2⎤ ⎣3 4 5⎦ -- modified original data -- data = ⎡6 1 2⎤ ⎣3 4 5⎦
func Write ¶
Write writes 'val' into 'w' in the NumPy data format.
- if val is a scalar, it must be of a supported type (bools, (u)ints, floats and complexes)
- if val is a slice or array, it must be a slice/array of a supported type. the shape (len,) will be written out.
- if val is a mat.Dense, the correct shape will be transmitted. (ie: (nrows, ncols))
The data-array will always be written out in C-order (row-major).
Example ¶
package main
import (
"bytes"
"fmt"
"log"
"gonum.org/v1/gonum/mat"
"github.com/sbinet/npyio"
)
func main() {
m := mat.NewDense(2, 3, []float64{0, 1, 2, 3, 4, 5})
fmt.Printf("-- original data --\n")
fmt.Printf("data = %v\n", mat.Formatted(m, mat.Prefix(" ")))
buf := new(bytes.Buffer)
err := npyio.Write(buf, m)
if err != nil {
log.Fatalf("error writing data: %v\n", err)
}
// modify original data
m.Set(0, 0, 6)
var data mat.Dense
err = npyio.Read(buf, &data)
if err != nil {
log.Fatalf("error reading data: %v\n", err)
}
fmt.Printf("-- data read back --\n")
fmt.Printf("data = %v\n", mat.Formatted(&data, mat.Prefix(" ")))
fmt.Printf("-- modified original data --\n")
fmt.Printf("data = %v\n", mat.Formatted(m, mat.Prefix(" ")))
}
Output: -- original data -- data = ⎡0 1 2⎤ ⎣3 4 5⎦ -- data read back -- data = ⎡0 1 2⎤ ⎣3 4 5⎦ -- modified original data -- data = ⎡6 1 2⎤ ⎣3 4 5⎦
Types ¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
npyio-ls
command
|
|
|
Package npy provides read/write access to files following the NumPy data file format:
|
Package npy provides read/write access to files following the NumPy data file format: |
|
Package npz provides read/write access to files with compressed NumPy data file format:
|
Package npz provides read/write access to files with compressed NumPy data file format: |