Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math Clojure矩阵表示_Math_Clojure_Matrix_Linear Algebra - Fatal编程技术网

Math Clojure矩阵表示

Math Clojure矩阵表示,math,clojure,matrix,linear-algebra,Math,Clojure,Matrix,Linear Algebra,Clojure中矩阵的良好表示是什么?我对处理浮点数的密集矩阵感兴趣。我想到了“列表列表”表示法,但还有更好的吗 良好代表性的一些标准包括: 效率:它们不会用于不断处理庞大的数据集,但我不想花费数小时计算结果,如果设计得更好,这些结果本可以在几分钟内完成 Java互操作性:很容易在两种语言之间来回传递数据 简单的并行化:如果我可以使用所有可用的内核,只需将map替换为pmap,那就太好了 易于使用reduce:似乎我在reduce上做的很多计算都很好 在矩阵行中表示图像扫描线的能力:不是很重要

Clojure中矩阵的良好表示是什么?我对处理浮点数的密集矩阵感兴趣。我想到了“列表列表”表示法,但还有更好的吗

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

  • 效率:它们不会用于不断处理庞大的数据集,但我不想花费数小时计算结果,如果设计得更好,这些结果本可以在几分钟内完成
  • Java互操作性:很容易在两种语言之间来回传递数据
  • 简单的并行化:如果我可以使用所有可用的内核,只需将
    map
    替换为
    pmap
    ,那就太好了
  • 易于使用
    reduce
    :似乎我在
    reduce
    上做的很多计算都很好
  • 在矩阵行中表示图像扫描线的能力:不是很重要,但最好有

有什么想法吗?

我不是专家,但我的意见是:)

列表列表可能是Clojure最自然的表示矩阵的习惯用法。这种结构还可以很好地映射/减少各种操作。Clojure在处理序列方面也非常有效——可能比大多数替代品都好

我不能保证这一点,但我想我见过Clojure在我编写的程序上努力工作3个或全部4个CPU,这些程序都是功能性的,但没有尝试并行。我怀疑编译器正在自己寻找一些并行处理的机会

我认为Clojure创建的序列类型在Java中可以作为列表使用,或者至少是可移植的。这可能已经足够满足您的需要了,尽管如果您试图在Java中将这些结构视为可修改的,可能会遇到问题

最好按顺序访问列表。如果您计划在矩阵中进行大量转换,那么从性能角度来看,向量向量可能更适合您。我怀疑使用nth功能的节拍

作为一名前C程序员,我简单地考虑过,您可以将矩阵实现为一维结构(即,直序列或更好的向量),并进行自己的索引计算以找到正确的元素。您可以使用分区函数逐步完成它。。。好吧,这是可以实现的,但我怀疑有很好的理由不这样做。

提供了一些包装,包括看起来相当不错的快速并行密集矩阵实现,它与Clojure基于seq的库接口。我没用过,但应该是你要找的


.

我目前正在使用中的列表方法,因为对于这个应用程序来说,让事情变得懒惰非常重要。我也在考虑转换到一种更有效的方法,只要它至少保持了外部表现的惰性

Rich Hickey的Clojure是一个基于JVM的Lisp,它用32路树表示PersistentVector(而不是PersistentList)

如果您想编写自己的矩阵类型,我将使用PersistentVector
否则最好的选择是使用平行柯尔特和白炽灯。

我正在编写一个矩阵库包装,暂定名为Clatrix。它缺少了很多我仍然想添加的功能,但它包含了您可能需要的大部分功能。看一看,.

我最近写了一些需要矩阵数学的代码,最初我使用了向量向量,map&reduce,但当我回到它时,发现结果代码很难理解(我对Clojure来说是个新手)。白炽灯使相同的代码非常简洁、易于理解(标准矩阵运算),而且速度更快。

请查看core.matrix提案+此处的实验实施:


写这篇文章的时候还很早,但值得关注。

答案可能需要在8年后更新。谷歌快速搜索显示,如果需要与Clojure core.matrix API兼容,可以使用core.matrix本身或其他实现,如vectorz clj


此外,我还发现了哪些是针对GPU优化的

您希望对这些矩阵执行何种操作?对于某些操作来说,将它们表示为列表列表是一个不错的选择,但如果您需要频繁访问数组的任意数组元素,它会让您丧命。截至2014年3月,我已经将其开发成一个相当全面的数组编程系统,名为
core.matrix
注意:这个答案现在已经过时了。白炽灯现在使用Clatrix,并且有新的更高级的矩阵实现avialable(请参见
core.matrix
及其各种实现,例如
vectorz clj
)。