相关疑难解决方法(0)

Clojure/Incanter中的快速矢量数学

我目前正在研究Clojure和Incanter作为R的替代品.(不是我不喜欢R,但尝试使用新语言会很有趣.)我喜欢Incanter并且发现语法很吸引人,但是矢量化操作比较慢例如,R或Python.

作为一个例子,我想使用Incanter向量运算,Clojure map和R来获得向量的第一阶差分.以下是所有版本的代码和时间.如你所见,R显然更快.

Incanter和Clojure:

(use '(incanter core stats)) 
(def x (doall (sample-normal 1e7))) 
(time (def y (doall (minus (rest x) (butlast x))))) 
"Elapsed time: 16481.337 msecs" 
(time (def y (doall (map - (rest x) (butlast x))))) 
"Elapsed time: 16457.850 msecs"
Run Code Online (Sandbox Code Playgroud)

R:

rdiff <- function(x){ 
   n = length(x) 
   x[2:n] - x[1:(n-1)]} 
x = rnorm(1e7) 
system.time(rdiff(x)) 
   user  system elapsed 
  1.504   0.900   2.561
Run Code Online (Sandbox Code Playgroud)

所以我想知道有没有办法加速Incanter/Clojure中的矢量操作?还欢迎涉及使用来自Clojure的循环,Java数组和/或库的解决方案.

我还向Incanter Google小组发布了此问题,目前尚无回复.

更新:我已将Jouni的答案标记为已接受,请参阅下面的我自己的答案,我已经清理了他的代码并添加了一些基准测试.

r vector clojure incanter

23
推荐指数
2
解决办法
5502
查看次数

Clojure矩阵表示

什么是Clojure中矩阵的良好表示?我对处理浮点数密集矩阵很感兴趣.脑海中浮现出"列表清单"的表现形式,但还有更好的东西吗?

良好代表性的一些标准包括:

  • 效率:它们不会用于大量数据集的持续处理,但我不想花费数小时来计算可以在几分钟内完成设计的结果.
  • Java互操作性:很容易在两种语言之间来回传递数据.
  • 易并行:如果我可以使用所有只需更换现有的核心mappmap,那将是很好的.
  • 适合使用reduce:似乎很多我正在做的计算很好reduce.
  • 能够在矩阵行中表示图像扫描线:不是很重要,但是很高兴.

有什么想法吗?

math clojure matrix linear-algebra

7
推荐指数
2
解决办法
5812
查看次数

标签 统计

clojure ×2

incanter ×1

linear-algebra ×1

math ×1

matrix ×1

r ×1

vector ×1