This package uses the cnpy library written by Carl
Rogers to provide read and write facilities for files created with (or
for) the NumPy extension for Python. Vectors and matrices of numeric
types can be read or written to and from files as well as compressed
files. Support for integer files is available if the package has been
built with -std=c++11
which is the default starting with
release 0.2.3 following the release of R 3.1.0, and available on all
platforms following the release of R 3.3.0 with the updated
‘Rtools’.
The following Python code
>>> import numpy as np
>>> fm = np.arange(12).reshape(3,4) * 1.1
>>> fm
0. , 1.1, 2.2, 3.3],
array([[ 4.4, 5.5, 6.6, 7.7],
[ 8.8, 9.9, 11. , 12.1]])
[ >>> np.save("fmat.npy", fm)
>>>
>>> im = np.arange(12).reshape(3,4)
>>> im
0, 1, 2, 3],
array([[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
[ >>> np.save("imat.npy", im)
>>>
saves two matrices in floating-point and integer representation.
With this R code we can read and assign the files:
> library(RcppCNPy)
R> fmat <- npyLoad("fmat.npy")
R> fmat
R1] [,2] [,3] [,4]
[,1,] 0.0 1.1 2.2 3.3
[2,] 4.4 5.5 6.6 7.7
[3,] 8.8 9.9 11.0 12.1
[>
R> imat <- npyLoad("imat.npy", "integer")
R> imat
R1] [,2] [,3] [,4]
[,1,] 0 1 2 3
[2,] 4 5 6 7
[3,] 8 9 10 11
[> R
Going the opposite way by saving in R and reading in Python works equally well. An extension not present in CNPy allows reading and writing of gzip-compressed files.
The package has been tested and used on several architecture, and copes correctly with little-vs-big endian switches.
More details are available in the package vignette.
The package is on CRAN and can be installed per:
R> install.packages("RcppCNPy")
On CRAN, stable and mostly feature-complete.
The reticulate package can also provide easy and comprehensive access to NumPy data; see the additional vignette in RcppCNPy for examples and more details.
Contributions are welcome, please use the GitHub issue tracker for bug reports, feature requests or general discussions before sending pull requests.
Dirk Eddelbuettel and Wush Wu
GPL (>= 2)