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

时间:2014-09-02 19:42:19

标签: parallel-processing julia

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

Y = R*X

大小为R的对角矩阵TxN包含来自rand()的条目和大小为X的矩阵NxM 非常大 TN。目前我使用

r = rand(T)
Y = scale(r, X)

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

1 个答案:

答案 0 :(得分: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

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