我想将矩阵的每一行乘以一个随机数,例如
Y = R*X
大小为 TxN
的对角矩阵 R
包含来自 rand()
的条目和矩阵 X
尺寸 NxM
和 非常大 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
这避免了分配新的矩阵,从而显着节省了内存和时间。
关于parallel-processing - 将矩阵的每一行乘以随机数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631114/