在 Julia 中使用 pmap 时修复参数
Fixing arguments when using pmap in Julia
我在 Julia
中定义了一个函数 f(x, y, z)
,我想为 x
的许多值并行计算 f
,保持 y
和 z
固定。使用 pmap
的 "best practices" 方法是什么?
要是像pmap(f, x, y = 5, z = 8)
就好了,这就是apply
家族在R
中处理固定参数的方式,但好像没那么简单那样。我设计了解决方案,但我发现它们不够优雅,而且我怀疑它们能否很好地概括我的目的。
- 我可以将
f
包装在函数 g
中,其中 g(x) = f(x, y = 5, z = 8)
。然后我简单地调用pmap(g, x)
。这比我想要的要简洁。
- 当定义
f
时,我可以将y
和z
的默认值设置为5和8,然后调用pmap(f, x)
。在我想将 y
固定为某个变量 a
的值的情况下,这让我感到不舒服,其中 a
在 [= 时(有充分的理由)没有被定义12=] 已定义,但将在调用 f
时定义。它有效,但它有点吓到我。
一个很好的解决方案是使用 anonymous 函数,例如
g(y, z) = x -> f(x, y, z)
pmap(g(5, 8), x)
或
pmap(x -> f(x, 5, 8), x)
在 Julia 0.4 中,匿名函数有性能损失,但这将在 0.5 中消失。
我在 Julia
中定义了一个函数 f(x, y, z)
,我想为 x
的许多值并行计算 f
,保持 y
和 z
固定。使用 pmap
的 "best practices" 方法是什么?
要是像pmap(f, x, y = 5, z = 8)
就好了,这就是apply
家族在R
中处理固定参数的方式,但好像没那么简单那样。我设计了解决方案,但我发现它们不够优雅,而且我怀疑它们能否很好地概括我的目的。
- 我可以将
f
包装在函数g
中,其中g(x) = f(x, y = 5, z = 8)
。然后我简单地调用pmap(g, x)
。这比我想要的要简洁。 - 当定义
f
时,我可以将y
和z
的默认值设置为5和8,然后调用pmap(f, x)
。在我想将y
固定为某个变量a
的值的情况下,这让我感到不舒服,其中a
在 [= 时(有充分的理由)没有被定义12=] 已定义,但将在调用f
时定义。它有效,但它有点吓到我。
一个很好的解决方案是使用 anonymous 函数,例如
g(y, z) = x -> f(x, y, z)
pmap(g(5, 8), x)
或
pmap(x -> f(x, 5, 8), x)
在 Julia 0.4 中,匿名函数有性能损失,但这将在 0.5 中消失。