当前位置: 首页 > 知识库问答 >
问题:

用于数据计算的Clojure core.async

司徒英卓
2023-03-14
(def x-ch (chan))
(def y-ch (chan))
(def w1-ch (chan))
(def w2-ch (chan))

; they all return matrices
(go (>! x-ch (Mat/* x (map #(/ 1.0 %) (max-fold x)))))
(go (>! y-ch (Mat/* y (map #(/ 1.0 %) (max-fold y)))))
(go (>! w1-ch (gen-matrix 200 300)))
(go (>! w2-ch (gen-matrix 300 100)))

(let [x1 (<!! (go (<! x-ch)))
        y1 (<!! (go (<! y-ch)))
        w1 (<!! (go (<! w1-ch)))
        w2 (<!! (go (<! w2-ch)))]

    ;; do stuff w/ x1 y1 w1 w2
)

我在符号XY中有预定义的(矩阵)向量。在使用这两个向量之前,我需要修改它们。那些矢量很大。我还需要生成两个随机矩阵。由于go宏以异步方式启动计算,所以我将所有四个计算任务拆分为单独的go块,并将结果放到通道中。然后我得到了一个let块,在这里我从通道中获取值,并将它们存储到符号中。它们都在使用阻塞<!!take函数,因为它们位于主线程上。

我试图做的基本上是通过将程序片段拆分为异步进程来加快计算时间。这样做对吗?

共有1个答案

臧正平
2023-03-14

对于这种处理,未来可能会稍微充分一些。

链接中的例子很容易理解:

 (def f 
   (future 
     (Thread/sleep 10000) 
     (println "done") 
     100))

的处理,未来的块是立即开始,所以上面做启动一个线程,等待10s和打印“完成”时完成。

(deref f)
; or @f
 (future 
    (Mat/* x (map #(/ 1.0 %) (max-fold x))))
 类似资料:
  • 问题内容: 我想制定一个程序来找出一个字符串中有多少个单词,并用空格,逗号或其他字符分隔。然后再将总数相加。 我正在做一个平均计算器,所以我想要数据的总数,然后将所有单词加起来。 问题答案: 更新: Xcode 10.2.x•Swift 5或更高版本 使用Foundation方法并将设置设置为选项: 或使用本机Swift 5的新属性和split方法: 扩展以支持子字符串:

  • 问题内容: 我们在项目中要求将实体的所有修订(更改历史记录)存储在数据库中。目前,我们有2个为此设计的提案: 例如,对于“雇员”实体 设计1: 设计2: 还有其他方法可以做到这一点吗? “设计1”的问题在于,每次您需要访问数据时,我们都必须解析XML。这将减慢该过程的速度,并增加一些限制,例如我们无法在修订数据字段上添加联接。 “设计2”的问题在于,我们必须在所有实体上重复每个字段(我们有大约70

  • Reselect 库可以创建可记忆的(Memoized)、可组合的 selector 函数。Reselect selectors 可以用来高效地计算 Redux store 里的衍生数据。 可记忆的 Selectors 初衷 首先访问 Todos 列表示例: containers/VisibleTodoList.js import { connect } from 'react-redux' im

  • 我知道这不是一个人应该在这里做的事情,尽管我不知道否则我怎么能问这个问题。 我的目标是统计有多少行具有相同的第一预测值(购买、维护等),但评级不同。 我的尝试是通过第一列来计算,然后计算我得到的不同评分,这将是非常棒的。 一个重要的假设是,如果两行相同,则它们已被预先擦除。因此,可以找到不同等级的行,但没有相同的行。 在我的示例中,第1行和第3行是相同的,因此其中一行被擦除,没有问题。然而,对于其

  • 问题内容: 我的问题是:是否有我可以使用的参考,也许是一本书或诸如决策树之类的东西,我可以参考这些参考来基于一些输入变量来决定应该走的路,例如: 数据库架构的成熟度 如何查询日志 需要重新创建记录的概率 更重要的是:写入或读取性能 所记录的值的性质(字符串,数字,blob) 可用的存储空间 我知道的方法是: 1.添加创建和修改日期及用户的列 表格示例: id value_1 value_2 val

  • 我有3列(时间,值,结果)的度量表。时间和值是时间序列数据库需要的基础。结果列标记可以具有以下值之一(成功/硬失败/软失败/未知)。 我想在给定的时间窗口内跟踪成功率(成功/总成功率)(因为我将在grafana上使用它,时间窗口可能会改变,并且应该支持动态时间范围查询) 我在流入量0.9上尝试过的东西: Grafana有一个百分比堆栈选项来显示计数值。不幸的是,它不显示百分比值。它只是显示了分布的