问题标签 [seq]

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 投票
3 回答
1878 浏览

f# - F# PSeq.iter 似乎并未使用所有内核

我一直在用 F# 做一些计算密集型的工作。使用 .Net Task Parallel Library 之类的函数Array.Parallel.map以指数级的速度加快了我的代码速度,而付出的努力非常少。

但是,由于内存问题,我重新编写了一段代码,以便可以在序列表达式中懒惰地评估它(这意味着我必须存储和传递更少的信息)。当需要评估时,我使用了:

代替:

当使用任何 Array.Parallel 函数时,我可以清楚地看到我计算机上的所有内核都启动了(~100% CPU 使用率)。然而,所需的额外内存意味着程序永远不会完成。

当我运行程序时使用 PSeq.iter 版本,CPU 使用率只有 8% 左右(并且 RAM 使用率最低)。

那么:PSeq 版本运行这么慢有什么原因吗?是因为懒惰的评价吗?我缺少一些神奇的“平行”的东西吗?

谢谢,

其他资源,两者的源代码实现(它们似乎在 .NET 中使用不同的并行库):

https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/array.fs

https://github.com/fsharp/powerpack/blob/master/src/FSharp.PowerPack.Parallel.Seq/pseq.fs

编辑:为代码示例和详细信息添加了更多详细信息

代码:

  • 序列

    /li>
  • 大批

    /li>

细节:

  • 存储中间数组版本在 10 分钟内快速运行(就崩溃前而言),但在崩溃之前使用 ~70GB RAM(64GB 物理,其余分页)
  • seq 版本需要 34 分钟并使用一小部分 RAM(仅约 30GB)
  • 我正在计算一个〜十亿的价值。因此,十亿双倍(每个 64 位)= 7.4505806GB。有更复杂的数据形式......我正在清理一些不必要的副本,因此当前大量的 RAM 使用。
  • 是的,架构不是很好,懒惰的评估是我尝试优化程序和/或将数据分成更小的块的第一部分
  • 使用较小的数据集,两个代码块输出相同的结果。
  • @pad,我尝试了你的建议,当输入 Calculation[] 时,PSeq.iter 似乎工作正常(所有内核都处于活动状态),但仍然存在 RAM 问题(它最终崩溃了)
  • 代码的摘要部分和计算部分都是 CPU 密集型的(主要是因为大数据集)
  • 使用 Seq 版本,我的目标只是并行化一次
0 投票
3 回答
2203 浏览

scala - 当 match 收到 IndexedSeq 但不是 LinearSeq 时出现 MatchError

有没有理由match写反对在类型上的Seq工作方式与在类型上的工作方式不同?对我来说,无论输入类型如何,下面的代码似乎都应该做同样的事情。当然不会,否则我不会问。IndexedSeqLinearSeq

在 2.9.1 final 上运行它,我得到以下输出:

它对于 List-y 的东西运行良好,但对于 Vector-y 的东西却失败了。我错过了什么吗?这是编译器错误吗?

scalac -print输出m看起来像:

0 投票
3 回答
350 浏览

scala - 使用每个 Tuple 的一个元素过滤 Tuple3 的 Seq

我有一个Seq元素Tuple3。我想要一个由每个元组的第二个元素组成的结果集合(可能是 a Set) 。

例如

任何的想法?我搜索了很多,但我发现的所有内容都与过滤元组有关,而不是在它们内部,如果这有任何意义的话。

我对 Scala 还是很陌生,学习是一个漫长的过程 :) 感谢您的帮助。

0 投票
2 回答
239 浏览

scala - Scala 将 Seq 转换为 sbt.Project.Setting[_] 的 k, v

Play 2.0 的 Build.sbt 使用拉皮条的项目定义来发挥它的魔力;您可能需要添加的任何其他设置必须以k := v时尚的方式手动输入。适用于一般情况,但不适用于特定情况;也就是说,当需要设置一个 sbt-plugin 的设置时,它总是Seq[Settings[_]]. 这是一个可以预见的工作示例

现在,如何将 Seq[Settings[_]] 转换为 k,v 对,因此 Play by-name 调用:

真的有效吗?!!

我已经询问过游戏用户,但祝你好运,那里有一个动物园,框架正在起飞,核心开发人员显然已经在他们的耳朵里......

0 投票
2 回答
3253 浏览

r - 用最少的代码打印一个乘法表

在 R 中,打印乘法表的最快方法(最短代码)是什么?seq rep 和 bind 函数有帮助,但我正在寻找最短的代码行来执行此操作。

打印 1 到 6 穿过(水平)。任何人都知道如何以更紧凑的方式执行此操作?

0 投票
5 回答
167686 浏览

list - Scala 中 Seq 和 List 的区别

我在许多示例中看​​到,有时使用 Seq,而其他时候使用 List ...

除了前者是 Scala 类型和 List 来自 Java 之外,有什么区别吗?

0 投票
1 回答
1698 浏览

performance - 为什么 Seq.iter 和 Seq.map 这么慢?

考虑 F# 中的这段代码:

为什么模块上的iterandmap函数比和模块等效的函数Seq慢得多?ArrayList

0 投票
2 回答
238 浏览

map - 从两个或多个序列创建地图序列

我是 Clojure 的新手,我想知道是否有办法从两个或多个序列创建一系列映射。

假设您有:

如果你合并了这些,我想得到 Ruby 中的哈希数组,或者 Clojure 中的一系列映射?

谢谢!

0 投票
1 回答
1014 浏览

haskell - Haskell:使用 deepseq 进行更严格的折叠

页面Foldr Foldl Foldl'讨论foldl',并将其定义为:

这样做是为了避免空间泄漏,即fold'产生恒定大小的结果仅使用恒定空间。

然而,这并不一定有效,正如这里所指出的:

所涉及的seq函数只评估最顶层的构造函数。如果累加器是一个更复杂的对象,那么fold'仍然会建立未评估的 thunk。

显而易见的解决方案是更改seqdeepseq如图所示(假设您正在使用NFData):

deepseq但我有一种感觉,这可能非常低效,因为每次通过循环都需要遍历整个结构(除非编译器可以静态证明这不是必需的)。

然后我尝试了这个:

但是发现它有这个问题。当它应该返回 3 时,下面会失败。

所以fold_stricter太严格了。该列表不必严格,防止空间泄漏的重要一点是累加器是严格的。fold_stricter走得太远并且也使列表变得严格,这导致上述失败。

这让我们回到fold_strict. deepseq在一个大小的数据结构上重复运行n需要O(n)时间,还是O(n)第一次和O(1)之后只需要时间?(正如dbaupp在下面的评论中建议的那样)

0 投票
2 回答
201 浏览

haskell - Haskell thunk 在评估方面是否可变?

在研究并行编程以及随后的评估策略时,出现了 thunk 是否可变的问题。举个例子,假设我有以下代码:

seq在评估bar评估时调用foo,给出bar正常形式的值3。这个评价也有影响foo吗?也就是说,是foo仍然1+2还是3经过评估后的价值bar