将矩阵的每一行乘以随机数的最佳方法

Man*_*idt 3 parallel-processing julia

我想将矩阵的每一行乘以一个随机数,例如

Y = R*X
Run Code Online (Sandbox Code Playgroud)

对角矩阵R大小的TxN含有条目从rand()与基体X尺寸的NxM非常大的 TN.目前我使用

r = rand(T)
Y = scale(r, X)
Run Code Online (Sandbox Code Playgroud)

但我想知道这是做得更快还是更好.例如,我认为没有必要创建向量r,但我不知道如何y[i] = rand()*X[i,:]有效/并行调用.

Ste*_*ski 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)

这避免了分配新矩阵,这大大节省了内存和时间.