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

标签 parallel-processing julia

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

Y = R*X

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

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/

相关文章:

julia - 是否可以在未评估的上下文中获取 Julia 函数的返回类型?

python - PyCall 在 Julia 中找不到 scipy

async-await - 页面加载时的 Blazor 和 ContinueWith

multithreading - 连通分量的并行算法

linux - 多个(有一个固定的)GNU 并行参数

julia - 两个结构可以相互引用吗? - Julia

julia - 在 Julia 中查找子字符串的索引

assembly - ARM 并行指令 ASX 和 SAX 的用途?

c - 我需要为 OpenCL 安装 Nvidia 的 SDK(CUDA) 来检测 Nvidia GPU 吗?

julia - 如何在两个for循环中使用break?