首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在incanter 1.4.0中创建矩阵

无法在incanter 1.4.0中创建矩阵
EN

Stack Overflow用户
提问于 2012-12-30 08:28:13
回答 1查看 228关注 0票数 3

我在学习clojure的过程中使用了incanter,当我尝试在lein下的REPL中创建一个矩阵时,我一直收到一个错误消息:

代码语言:javascript
复制
user=> (use 'incanter.io)
nil
user=> (use 'incanter.core)
nil
user=> (def A (matrix [[1 2 3] [4 5 6] [7 8 9]])) 
NoSuchMethodError edu.emory.mathcs.utils.ConcurrencyUtils.getThreads
BeginN_2D()Icern.colt.matrix.tdouble.impl.DenseColumnDoubleMatrix2D.assign (DenseColumnDoubleMatrix2D.java:661)

这看起来像是一个依赖问题,但还不确定如何解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2013-01-02 09:33:03

使用org.clojure/clojure "1.4.0“和incanter "1.4.1”遇到同样的问题。Def给人一种类路径阴影的感觉。

在repl中执行以下操作以确定ConcurrencyUtils来自哪个jar:

代码语言:javascript
复制
(.getResource edu.emory.mathcs.utils.ConcurrencyUtils
    "/edu/emory/mathcs/utils/ConcurrencyUtils.class")

这就指向了jplasma。果不其然,jplasma有它自己的那个类的副本,其中包含各种方法,包括缺少getThreadsBeginN_2D。

查看deps ("lein pom“后跟"mvn dependency:tree")显示这是由incanter 1.4.1引入的依赖:

代码语言:javascript
复制
[INFO] |  +- incanter:incanter-core:jar:1.4.1:compile
[INFO] |  |  +- org.clojure:math.combinatorics:jar:0.0.3:compile
[INFO] |  |  \- net.sourceforge.parallelcolt:parallelcolt:jar:0.10.0:compile
[INFO] |  |     +- net.sourceforge.jplasma:jplasma:jar:1.2.0:compile

更改了project.clj中incanter的条目,以排除jplasma:

代码语言:javascript
复制
[incanter "1.4.1"
    :exclusions [net.sourceforge.jplasma/jplasma]]

这将从jtransforms获得ConcurrencyUtils (因此仍然不是来自parallelcolt),但至少修复了矩阵问题:

代码语言:javascript
复制
=> (matrix [[1 2 3] [4 5 6] [7 8 9]])
[1.0000 2.0000 3.0000
4.0000 5.0000 6.0000
7.0000 8.0000 9.0000]

不确定排除的影响是什么。在clojars上有一个不会破坏矩阵的较旧版本,你可以试着把它添加到你的project.clj中:

代码语言:javascript
复制
[incanter/jplasma "0.9.4"]

不过,这些副手显然需要由理解他们的人进行适当的排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14087222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档