Parallel processing 将矩阵的每一行乘以一个随机数的最佳方法
我想用一个随机数乘以矩阵的每一行,例如Parallel processing 将矩阵的每一行乘以一个随机数的最佳方法,parallel-processing,julia,Parallel Processing,Julia,我想用一个随机数乘以矩阵的每一行,例如 Y = R*X 大小为TxN的对角矩阵R包含来自rand()的条目,大小为NxM的矩阵X非常大T和N。目前我使用 r = rand(T) Y = scale(r, X) 但我想知道这是更快还是更好。例如,我认为没有必要创建向量r,但我不知道如何高效/并行地调用y[I]=rand()*X[I,:]。您可以使用scale修改X到位: julia> X = [ 1/(i + j - 1) for i=1:5, j=1:5 ] 5x5 Array{Flo
Y = R*X
大小为TxN的对角矩阵R
包含来自rand()
的条目,大小为NxM
的矩阵X
非常大T
和N
。目前我使用
r = rand(T)
Y = scale(r, X)
但我想知道这是更快还是更好。例如,我认为没有必要创建向量
r
,但我不知道如何高效/并行地调用y[I]=rand()*X[I,:]
。您可以使用scale代码>修改X
到位:
julia> X = [ 1/(i + j - 1) for i=1:5, j=1:5 ]
5x5 Array{Float64,2}:
1.0 0.5 0.333333 0.25 0.2
0.5 0.333333 0.25 0.2 0.166667
0.333333 0.25 0.2 0.166667 0.142857
0.25 0.2 0.166667 0.142857 0.125
0.2 0.166667 0.142857 0.125 0.111111
julia> r = rand(5)
5-element Array{Float64,1}:
0.98996
0.88145
0.808518
0.632665
0.00807468
julia> scale!(r,X);
julia> X
5x5 Array{Float64,2}:
0.98996 0.49498 0.329987 0.24749 0.197992
0.440725 0.293817 0.220363 0.17629 0.146908
0.269506 0.20213 0.161704 0.134753 0.115503
0.158166 0.126533 0.105444 0.0903807 0.0790832
0.00161494 0.00134578 0.00115353 0.00100933 0.000897187
这避免了分配新矩阵,这在内存和时间上都是一个显著的节约。在您的情况下,与调用scale()
相比,创建r
需要多长时间?您肯定要创建临时r
。原因是:按行遍历X
效率极低,按列遍历速度快5-10倍。所以在这种情况下,分配临时r
,并按列(即内存存储顺序)遍历X
,将是一个巨大的胜利。特别是如果X
和r
是Float32
,在这种情况下,这应该是SIMD vectorize.nice,+1表示比例代码>Thx。将扩大规模!使用多核?目前不使用多核。