相关疑难解决方法(0)

Clojure与Numpy的矩阵乘法

我正在使用Clojure中的一个应用程序,它需要繁殖大型矩阵,并且与相同的Numpy版本相比,遇到了一些大的性能问题.Numpy似乎能够在一秒钟内通过其转置乘以1,000,000x23矩阵,而等效的clojure代码需要超过六分钟.(我可以从Numpy打印出结果矩阵,所以它肯定会评估所有内容).

我在这个Clojure代码中做了哪些非常错误的事情?我可以尝试模仿Numpy的一些技巧吗?

这是python:

import numpy as np

def test_my_mult(n):
    A = np.random.rand(n*23).reshape(n,23)
    At = A.T

    t0 = time.time()
    res = np.dot(A.T, A)
    print time.time() - t0
    print np.shape(res)

    return res

# Example (returns a 23x23 matrix):
# >>> results = test_my_mult(1000000)
# 
# 0.906938076019
# (23, 23)
Run Code Online (Sandbox Code Playgroud)

和clojure:

(defn feature-vec [n]
  (map (partial cons 1)
       (for [x (range n)]
         (take 22 (repeatedly rand)))))

(defn dot-product [x y]
  (reduce + (map * x y)))

(defn transpose
  "returns the transposition of a …
Run Code Online (Sandbox Code Playgroud)

python numpy clojure matrix

41
推荐指数
6
解决办法
1万
查看次数

有没有好的Clojure基准测试?

编辑: Clojure基准测试在基准测试游戏中有所提升.

我已经在社区维基上提出了这个问题并邀请其他人更新.


有人知道Clojure表现的基准吗?

我已经做了一些我自己的(虽然没有什么太正式),与其他功能语言(尝试Haskell和OCaml)相比,它不太公平.但是,与Java或JVM上的其他语言(例如Scala)相比,它看起来如何呢?它与其他Lisps相比如何?

关于在那里添加Clojure 的计算机语言基准游戏论坛上有一些讨论,但还没有完成任何工作.

编辑:我将继续添加到此,因为我发现更多:

@igouy指出,clojure的基准脚本由github上的jafingerhut 创建的.

来自Clojure讨论组的两个非常相关的主题:

另外,这些博文:

最后,有关stackoverflow的相关问题:

这些讨论中的大多数让我认为Clojure的性能与JVM上运行的其他语言相比非常有利,尽管毫无疑问,在比较语言时可能很难得出一个广泛的结论,因为它们的性能可能会有很大差异依赖于任务.

编辑:

Lau Jensen刚刚在他的博客上发表了一篇关于使用JVM语言进行基准测试的讨论:"正确地进行基准测试".

java performance functional-programming scala clojure

33
推荐指数
3
解决办法
1万
查看次数