如何在Julia中加载pickle文件

如何在Julia中加载pickle文件,julia,pickle,Julia,Pickle,我有一个pickle文件,它是使用python编写的(使用cPickle)。我需要在朱莉娅体内使用它。我想我可以使用PyCall实现这一目的。以下是我到目前为止所做的: julia> using PyCall julia> @pyimport cPickle as pickle julia> f=open("mypicklefile.picle","r") julia> PyTextIO(f)[:seek](0) #if I don't do this, I got e

我有一个pickle文件,它是使用python编写的(使用cPickle)。我需要在朱莉娅体内使用它。我想我可以使用PyCall实现这一目的。以下是我到目前为止所做的:

julia> using PyCall
julia> @pyimport cPickle as pickle
julia> f=open("mypicklefile.picle","r")
julia>  PyTextIO(f)[:seek](0) #if I don't do this, I got error. 
julia> trn,tst= pickle.load(PyTextIO(f))
在这里,我有两个问题。据我所知,与Julia不同,python(numpy)是rowmajor。那么,我应该怎么做才能以正确的方式读取文件的内容呢?我想我得告诉PyCall它是按主要顺序写的。
我的第二个问题是关于性能。pickle文件大约为4.5GB。当我在python中阅读它时,它在一分钟内完成,而在julia中至少需要15分钟。我做错什么了吗?由于文件不是由我创建的,因此我不能使用其他格式,如hdf5或jld

为什么不使用Python以更有用的格式编写它,例如hdf5?时间上的差异可能是由于将生成的python对象转换为Julia。这可能是一个选项,但我的python经验非常有限,因此如果可能的话,我宁愿不这样做。我正在考虑创建一个Julia包来加载pickle,在这样做之后:但是使用PyCall可能会更快,因为cPickle已经非常优化了。可以使用
ccall
调用cPickle后面的后台编译代码(IIRC它是python?的C扩展,而不是纯python pickle)。上一次我不得不这样做时,我使用PyCall调用pickle并没有任何问题。但那是在Julia0.3天的时候,我可能只是保存而不是加载。比如@DavidP.Sanders建议,为什么不使用Python作为pickle文件在Julia中加载它,并将它(在Julia中)保存为更有用的文件格式(如hdf5或jld)。可能需要一次性等待30分钟OK@DanGetz是的,当然,我按照你的建议做了。我想我误解了David的建议。为什么不使用Python以更有用的格式编写它,例如hdf5?时间上的差异可能是由于将生成的python对象转换为Julia。这可能是一个选项,但我的python经验非常有限,因此如果可能的话,我宁愿不这样做。我正在考虑创建一个Julia包来加载pickle,在这样做之后:但是使用PyCall可能会更快,因为cPickle已经非常优化了。可以使用
ccall
调用cPickle后面的后台编译代码(IIRC它是python?的C扩展,而不是纯python pickle)。上一次我不得不这样做时,我使用PyCall调用pickle并没有任何问题。但那是在Julia0.3天的时候,我可能只是保存而不是加载。比如@DavidP.Sanders建议,为什么不使用Python作为pickle文件在Julia中加载它,并将它(在Julia中)保存为更有用的文件格式(如hdf5或jld)。可能需要一次性等待30分钟OK@DanGetz是的,当然,我按照你的建议做了。我想我误解了大卫的建议。