问题标签 [pmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1672 浏览

r - 列表列数据框中的 purrr pmap

当我有一个包含两个输入列(a 和 b)的列表列数据框(df1)时,我可以使用 map2 获得一个新列

现在假设我有一个带有 3 个输入列(a、b 和 c)的新数据框(df2)。

如何使用 3 个输入列获取新列?由于没有map3,我想我应该使用pmap,但我不知道如何。

0 投票
2 回答
461 浏览

matrix - Julia pmap 速度 - 并行处理 - 动态规划

我正在尝试加快填充 Julia(v0.6.0)中动态编程问题的矩阵,但我似乎无法从使用pmap. 这与我差不多一年前发布的这个问题有关:Filling a matrix using parallel processing in Julia。那时我能够在一些很大的帮助下加速串行处理,现在我正试图从 Julia 的并行处理工具中获得额外的速度。

对于串行处理案例,我使用了一个 3 维矩阵(本质上是一组大小相等的矩阵,由第一维索引)并在第一维上进行迭代。不过,我想pmap尝试一下,以更有效地迭代矩阵集。

这是代码设置。为了使用下面pmapv_iter函数,我将三维矩阵转换为字典对象,字典键等于第一维中的索引值(v_dict在下面的代码中,gcc等于第一维大小)。该v_iter函数将其他字典对象(E_opt_dictgridpoint_m_dict以下)作为附加输入:

对于并行处理,我执行了以下两个命令:

...产生了这种表现:

135.626417 seconds (3.29 G allocations: 57.152 GiB, 3.74% gc time)

然后我尝试改为串行处理:

...并获得了更好的表现。

v_iter这也给了我与在原始 3 维对象上运行相同的性能:

我知道并行处理涉及设置时间,但是当我增加 的值gcc时,串行和并行的处理时间仍然大致相同。这似乎是并行处理的一个很好的候选,因为不需要在工作人员之间进行消息传递!但我似乎无法让它有效地工作。

0 投票
1 回答
86 浏览

julia - 具有欧几里得距离运算的 Pmap

我对 Julia 编程语言非常陌生,我正在测试一些我通常用其他语言执行的欧几里得距离运算。如果连续调用函数,这些函数会起作用,但 pmap 调用不会返回所需的结果。有人可以看看并让我知道我是否以正确的方式进行此操作?pmap 甚至是解决此问题的最佳方法吗?

第一个函数:欧几里得距离矩阵

第二个功能:最小欧几里得距离单向

第三个函数:最小欧几里得距离和对应的单向指数

调用函数

编辑:

第一个函数应该返回一个简单的欧几里得距离矩阵,其中包含一个数组中的每一行与第二个数组中的每一行之间的距离。第二个和第三个函数是基于一个数组中的每一行到另一个数组中的每一行的最小距离返回这些距离的子集的偏差(第三个函数返回最小距离的索引位置)。距离似乎没有正确计算,使用 pmap 的后两个函数分别返回 nx3 矩阵而不是 nx1 和 nx2。

编辑 2:使用较小数据集显示结果的示例

编辑 3:@distributed 函数二的版本

0 投票
1 回答
592 浏览

r - r - 将 dplyr::group_by 与 purrr::pmap 结合使用

我有以下数据框:

我想做以下事情:

但最初我有许多变量,我需要将lead()函数与group_by()多个变量结合应用。我正在努力purrr::pmap()实现这一目标:

不幸的是,这会导致错误:

0 投票
1 回答
415 浏览

r - 在 mutate() 之外以逐行方式使用 purrr::pmap()

我正在尝试使用 purrr::pmap() 沿某些数据帧行以逐行方式应用自定义函数。我可以使用 for 循环和 with 实现我想要的最终结果apply(),但是当我尝试使用时,pmap()我只能结合 mutate() 获得我想要的结果,这在我的实际应用案例中是不够的。

有没有一种方法可以pmap()应用我的自定义函数并且只打印输出而不是存储在新列中?

创建演示数据和自定义函数

逐行for循环的成功例子:

使用成功的例子apply()

pmap()在其中使用的示例mutate()几乎是我需要的。

失败代码:为什么这不起作用?

0 投票
1 回答
596 浏览

memory-management - SharedArrays 和 Julia 中跨进程的数据移动

我试图了解 SharedArray 类型的数据是否正在跨进程移动并因此导致开销。

在我的主模块(过程 1)中定义变量后,我在我的数据的 Array(im1)和 SharedArray(im1_shared)版本上调用pmap

所以im1im2im1_sharedim2_shared是一种默认参数,切片由迭代器 x 获取并由工作人员处理。

使用

@fetchfrom 2 varinfo()

我得到:

im1 122.070 MiB 4000×4000 数组{Float64,2}

im2 122.070 MiB 4000×4000 数组{Float64,2}

im1_shared 122.071 MiB 4000×4000 SharedArray{Float64,2}

im2_shared 122.071 MiB 4000×4000 SharedArray{Float64,2}

所以我对此的想法和困惑:

  1. 在 Array 类型的 pmap 函数调用期间,im1 和 im2 被复制到所有 3 个额外的工作人员。最后,我的内存中有 4 个im1im2副本。
  2. 工作人员(这里是工作人员 2)也列出了 SharedArrays。所以我认为其中任何一个都可能是部分正确的:

    2.1。varinfo()列出工作人员本地工作空间中的所有变量,但 SharedArrays 不存储在这些工作人员的本地内存中。它们只是被列出来暗示工作人员可以访问它们。

    在这种情况下,如果 SharedArrays 只存储一次并且所有工作人员都可以访问它们,为什么这些类型在 Julia 中不是默认的——首先是为了最小化开销?

    2.2 SharedArray 也被复制到每个工作人员,因此每个 SharedArray 有 122 MiB。因此,SharedArrays 相对于 Arrays 的唯一优势是每个工作人员都可以访问。必须将存储的数据复制到每一种方式。

    在这种情况下,避免开销的唯一方法是使用分布式数组之类的东西,让工作人员只对他们已经可以访问/存储在内存中的块进行操作,对吧?

您能否帮我对这两种情况(2.1 和 2.2)理清思路。

更新1:这是一个工作示例:

0 投票
0 回答
53 浏览

r - 在 r 中,pmap 函数对我来说是破坏性的

输出是:

实际上,这是函数文档中的一个示例。

0 投票
1 回答
250 浏览

r - purrr::pmap 与其他默认输入

我想知道pmap()如果我有超过 3 个输入作为参数映射到具有其他默认输入的函数,如何使用函数。

这是一个可重现的示例:

输出:

但正如您所看到的,输出不是按向量的顺序映射meansd

我想拥有[[1]]等等rnorm(mean=5,sd=1,n=9)。出于好奇,我想知道pmap()这个演示在做什么。

顺便说一句,我知道在这个例子中,我可以轻松使用map2(),但在我的真实代码中,我有 10 个输入,所以我需要使用pmap().

提前感谢您的任何回复!

0 投票
0 回答
642 浏览

r - 在多个列上使用 purrr:map(超过 2 个)

我有以下数据——

我想将它传递给一个函数。这是我将如何使用不存在的map3(万岁)-

Pmap可能是一种选择?我只是不太熟悉,一个问题似乎是我无法明确分配变量(即.x、.y、.z),而我想要映射到的函数需要大量可选变量(而且我只想指定 startdate、enddt 和 k)。

任何帮助表示赞赏,在此先感谢。

0 投票
2 回答
97 浏览

r - 使用 pmap 将参数 tibble 映射到函数 assign 会生成一个列表,而不是环境中的对象(根据需要)

序言:我试图模仿的相关 SO 问题,但收到了相同(不正确)的结果。

我正在尝试将一组参数传递给assignvia purrr::pmap。我的参数tibble有两列:名称 ( chr) 和数据 ( tbl_df)。一个小的,可重现的例子:

输出只是数据帧(mtcars、iris、rock)的列表,但没有在环境中创建对象(“One”、“Two”、“Three”)(根据需要)。我已经尝试过map2,按照上面提到的 SO 帖子的思路:

...它给出了相同的不想要的输出(数据帧列表)。

TIA

对答案结果进行基准测试

我很好奇这些功能将如何执行。这里唯一的区别是为了节省计算,我创建了一个命名数据框的小标题,然后应用get这是我的代码,使用rbenchmark

结果: