【问题标题】:Bootstrapping using @distributed in Julia在 Julia 中使用 @distributed 进行引导
【发布时间】:2018-11-19 11:16:30
【问题描述】:

我想在 Julia 中做一个简单的 Monte Carlo bootstrap 类型模拟。刚开始学习 Julia,发现有一种方法可以使用 @distributed 并行处理。所以我写了这个简单的代码,但是花了之后我真的不明白为什么它会失败。一些帮助真的会帮助我学习

using Random, RCall, StatsBase, HypothesisTests, Suppressor, Distributed, BenchmarkTools, Statistics
@everywhere using Random, RCall, StatsBase, HypothesisTests, Suppressor, Distributed, BenchmarkTools, Statistics; rmprocs(workers()); addprocs(4); nworkers()

function setup(n, B, nl, sl)

    take_counter = @distributed (+) for m in 1:nl
        Y = randn(n)
        mean_Y = mean(Y)

        counter = 0
        for i = 1:B
                Y_st = sample(Y, n, replace = true)
                mean_Y_st = mean(Y_st)  


                if mean_Y_st > mean_Y
                    counter += 1
                end
        end
        p_value = counter/B


        if p_value < sl  
            1
        else 
            0
        end
    end
    take_counter  

 end    

take_counter = setup(25, 200, 40, 0.05)

如果我运行我得到一个巨大的错误,一些帮助可能真的很有用。非常感谢您的帮助。

【问题讨论】:

  • “如果我运行我得到一个巨大的错误”:请分享这个错误:)。它可以更轻松地帮助诊断问题。

标签: parallel-processing julia statistics-bootstrap


【解决方案1】:

我没有详细检查你的代码(特别是 - 我没有检查它是否计算出你想要的),只是简单地重写它以保留它运行所需的内容。

此代码适用于我:

using Distributed

rmprocs(workers()); addprocs(4); nworkers()

@everywhere using Statistics

function setup(n, B, nl, sl)
    @distributed (+) for m in 1:nl
        Y = randn(n)
        mean_Y = mean(Y)
        counter = 0
        for i = 1:B
                Y_st = rand(Y, n)
                mean_Y_st = mean(Y_st)  
                if mean_Y_st > mean_Y
                    counter += 1
                end
        end
        p_value = counter / B
        Int(p_value < sl)
    end
end

take_counter = setup(25, 200, 40, 0.05)

(它本质上是相同的,只是有一些小的曲折)。请让我知道它是否适合您,以便我们进一步诊断您的问题。

编辑:现在我查看了您的代码,我可以看到问题出在哪里。您首先运行@everywhere,然后删除和添加工作人员。这意味着新员工没有@everywhere 在他们身上运行。添加工人后,您必须运行@everywhere

【讨论】:

  • 非常感谢,您的建议有助于修复代码,非常感谢。刚开始使用 Julia(也感谢我的朋友 Tileaman Conring),我在想我是否会在这里得到答案,但非常感谢你和使用 Julia 的 StackOverflow 社区。使用 Julia 让我更有灵感。
  • @Shaikh - 我在我的代码中修复了一行。它应该是Y_st = rand(Y, n),它从Y 中获取n 样本并进行替换。之前我写过rand(Y),它只从Y 中提取了一个元素。抱歉出现错误。
  • 没问题,感谢修复,我刚刚更改了第一部分,效果很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
相关资源
最近更新 更多