在Julia中将数组转换为SharedArray
简单的问题。假设我有一些数组:在Julia中将数组转换为SharedArray,julia,Julia,简单的问题。假设我有一些数组: julia> A = randn(3,3) 如何将其转换为一个可由并行进程访问/更改的文件?到目前为止,尚未实现自动执行此操作的转换函数: julia> SharedArray(A) ERROR: MethodError: `convert` has no method matching ... 我认为唯一的方法是使用构造函数(并传递适当的初始化函数,init): 这里有一个简单的方法。不确定是否有更好的: addprocs(3) # add wo
julia> A = randn(3,3)
如何将其转换为一个可由并行进程访问/更改的文件?到目前为止,尚未实现自动执行此操作的转换函数:
julia> SharedArray(A)
ERROR: MethodError: `convert` has no method matching ...
我认为唯一的方法是使用构造函数(并传递适当的初始化函数,init
):
这里有一个简单的方法。不确定是否有更好的:
addprocs(3) # add worker processes
A = randn(3,4)
S = SharedArray(Float64, size(A))
S[:] = A[:] # works because A is defined on master process 1
在中已经实现了不同的转换方法。下表定义了如何将数组转换为相同元素类型的SharedArray:
convert(::Type{SharedArray},A::Array)=(S=SharedArray(eltype(A),size(A));copy!(S,A))
因此,只需调用convert函数即可将数组转换为SharedArray:
julia> src=ones(2,4)
2x4 Array{Float64,2}:
1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0
julia> convert(SharedArray,src)
2x4 SharedArray{Float64,2}:
1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0
进行转换的预期方法是直接调用
convert()
函数,将source作为参数传递给构造函数可能不会得到所需的答案。
julia> src=ones(2,4)
2x4 Array{Float64,2}:
1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0
julia> convert(SharedArray,src)
2x4 SharedArray{Float64,2}:
1.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0