我一直在尝试使用Clojure及其Java互操作功能进行一些简单的测试,并且遇到了一些问题。我正在与Parallel Colt Java库连接,尝试LU factorization - Parallel Colt提供的一项功能。我看到了表单的错误
“ NoSuchMethodError edu.emory.mathcs.utils.ConcurrencyUtils.getThreadsBeginN_1D ”......
以下是我正在使用的一些简单代码:
(ns colt-test.core
(:import [cern.colt.matrix.tdouble DoubleMatrix1D DoubleMatrix2D]
[cern.colt.matrix.tdouble.impl DenseDoubleMatrix2D DenseDoubleMatrix1D]
[cern.colt.matrix.tdouble.algo.decomposition DenseDoubleLUDecomposition]
[cern.colt.list.tdouble DoubleArrayList])
;; make a 1D double array, size N of random values up to val
(defn make-1D-rand-array [N val]
(let [v (repeatedly N #(rand val))]
(double-array v)))
;; make a 2D double array, size NxN of random values up to val
(defn make-2D-rand-array [N val]
(let [v (repeatedly N #(make-1D-rand-array N val))]
(into-array v)))
;; Test LU factorization
;; matrix A size 10 x 10, random values
(def A (DenseDoubleMatrix2D. (make-2D-rand-array 5 10.0)))
;; vector b of size 10, random values
(def b (DenseDoubleMatrix1D. (make-1D-rand-array 5 10.0)))
我可以在“b”,DenseDoubleMatrix1D上调用一些函数,例如size()和elements()。另外,我可以打电话给
set(int index, double value)
使用clojure interop语法
(.set b 0 10.5)
它会将“b”的第一个元素更新为10.5。
但是,当我在“b”上调用其他一些方法时,例如
assign(double value)
as
(.assign b 10.0)
将b的所有元素设置为10.0,我得到一个NoSuchMethodError。从本质上讲,我似乎有正确的调用一些互操作方法,但没有其他人,我不知道我做错了什么。
我在尝试
时看到同样的错误(DenseDoubleLUDecomposition. A)
供参考,这里是并行colt javadoc(http://incanter.org/docs/parallelcolt/api/) 注意,我使用的是稍微更新版本的平行小马。
答案 0 :(得分:1)
我已经想出如何让它发挥作用。我使用的是parallel-colt 0.10.0,当我升级到版本0.10.1时,一切都按预期工作。
希望这有助于某人。