我有一个3维的numpy ndarray
,已作为.npy
文件保存到磁盘。我想将其引入R以应用一些未在python中实现的统计函数。有方便的方法吗? RcppCNPy尚未推广到3+维度,至少目前还没有。
我总是可以在python端以其他不同的格式保存数组,但这会不太方便并且更容易出错。
这里有一些虚拟数据:
import numpy as np
goats_are_super = np.array(list(range(24))).reshape(4,3,2)
np.save("goats_are_super", goats_are_super)
答案 0 :(得分:6)
您可以尝试使用reticulate从R环绕现有的Python代码。这是一个较新的版本,但相当通用,支持许多类型。
在RcppCNPy软件包中,我有vignette展示了reticulate如何完成RcppCNPy的工作(当然,这可能会涉及更多的安装工作),所以也许尝试一下?
同样,小插图是here,供您细读。
答案 1 :(得分:1)
早在2016年,我遇到了类似的问题。可以在这里找到Avinash Balakrishnan和我自己想出的解决方案:
http://thecoatlessprofessor.com/programming/numpy-arrays-to-r-array-objects/
简而言之,我们使用rpy2
来处理NumPy到 R 数组的转换。
import os, sys, getopt
import numpy as np
import re
from rpy2.robjects import r
from rpy2.robjects.numpy2ri import numpy2ri
def convert_numpy(path_to_data, fname, export_dir):
"""Convert NumPy N-D array to R object
Keyword arguments:
path_to_data -- full dir path to data
fname -- partial file name to match
export_dir -- Name of export dir added to data dir
"""
# Create a directory path
if not os.path.exists("%s/%s" % (path_to_data,export_dir)):
os.makedirs("%s/%s" % (path_to_data,export_dir))
# Get list of files in the directory
files = os.listdir(path_to_data)
# Sort out which files are of each type
numpy_files = sorted([f for f in files if fname in f])
# Begin process conversion
for numpy_fname in numpy_files:
# Load in 4D Numpy Array
d = np.load("%s/%s" % (path_to_data, numpy_fname))
# Remove the file extension of .npy binary
file_name = re.sub('\.npy$', '', numpy_fname)
# Convert the numpy object to R
ro = numpy2ri(d)
# Assign the name
r.assign("%s" % file_name,ro)
# Export to .gzip readable by R's load()
r("save(%s, file='%s/%s/%s.gzip', compress=TRUE)" % (file_name,path_to_data,export_dir,file_name))
可以使用以下命令将其读入 R :
load("a_patches_b1.gzip")