如何解决如何在Julia中读取包含类型为'<class'numpy.float32'>'的稀疏矩阵的泡菜文件?
我正在尝试读取Julia中最初由python创建的泡菜文件。这是我所做的:
f3=open("filename.pickle");
r3 = pickle.load(f3)
这将返回以下内容:
PyObject <41302x1425 sparse matrix of type '<class 'numpy.float32'>'
with 1602890 stored elements in Compressed Sparse Row format>
-
如何访问矩阵元素?
-
假设我在Julia中有一个稀疏矩阵,如何将数据存储到相同格式的pickle文件中?
仅供参考,我已经做了以下操作来解决有关找不到scipy模块的错误:
using Conda
Conda.add("scipy")
解决方法
从Julia到Python泡菜:
julia> using PyCall
julia> a = rand(Float32,2,2)
2×2 Array{Float32,2}:
0.943764 0.726961
0.9184 0.422781
julia> pickle = pyimport("pickle");
julia> open("pyt.pickle","w") do f
pickle.dump(a,f)
end
在Python中阅读上述泡菜:
>>> import pickle,numpy
>>> f=open("pyt.pickle","rb")
>>> a = pickle.load(f)
>>> f.close()
>>> a
array([[0.94376445,0.72696066],[0.91840017,0.42278147]],dtype=float32)
>>> type(a)
<class 'numpy.ndarray'>
准备一个新的泡菜,这次将在Julia中阅读:
>>> b = numpy.ones((2,3),dtype='float32')
>>> b
array([[1.,1.,1.],[1.,1.]],dtype=float32)
>>> f=open("pyt2.pickle","wb")
>>> pickle.dump(b,f)
>>> f.close()
在Julia中读取Python创建的泡菜:
julia> using PyCall
julia> pickle = pyimport("pickle");
julia> open("pyt2.pickle","r") do f
pickle.load(f)
end
2×3 Array{Float32,2}:
1.0 1.0 1.0
1.0 1.0 1.0
此介绍之后,让我们做一个稀疏数组。我们从Python设置开始:
>>> import scipy
>>> a = scipy.sparse.rand(4,4,0.25,dtype="float32")
>>> a
<4x4 sparse matrix of type '<class 'numpy.float32'>'
with 4 stored elements in COOrdinate format>
>>> f=open("pyt3.pickle","wb")
>>> pickle.dump(a,f)
>>> f.close()
>>> print(a)
(0,3) 0.30552787
(3,0) 0.810103
(2,1) 0.691249
(2,2) 0.63436085
让我们现在在朱莉娅中阅读它:
julia> a=open("pyt3.pickle","r") do f
pickle.load(f)
end
PyObject <4x4 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in COOrdinate format>
julia> using SparseArrays;
julia> res = spzeros(Float32,a.shape...);
julia> sp = pyimport("scipy.sparse");
julia> i,j,vals = sp.find(a);
julia> setindex!.(Ref(res),vals,i .+ 1,j .+ 1); #we copy the data to Julia structure
julia> res
4×4 SparseMatrixCSC{Float32,Int64} with 4 stored entries:
[4,1] = 0.810103
[3,2] = 0.691249
[3,3] = 0.634361
[1,4] = 0.305528
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。