gpt4 book ai didi

clojure - 无法在 incanter 1.4.0 中创建矩阵

转载 作者:行者123 更新时间:2023-12-02 03:51:52 26 4
gpt4 key购买 nike

我在学习 clojure 的同时也在玩 incanter,当我尝试在 lein 下的 REPL 中创建矩阵时,我不断收到错误消息:

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)

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

最佳答案

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

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

(.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 引入的依赖项:

[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:

[incanter "1.4.1"
:exclusions [net.sourceforge.jplasma/jplasma]]

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

=> (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 上有一个旧版本的 jplasma,它不会破坏矩阵,您可以尝试将其添加到您的项目中。clj:

[incanter/jplasma "0.9.4"]

不过,这些部门显然需要由了解他们的人正确分类。

关于clojure - 无法在 incanter 1.4.0 中创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com