我一直在尝试使用 Clojure 及其 Java 互操作功能进行一些简单的测试,但遇到了一些问题。我正在与 Parallel Colt Java 库交互,尝试LU 分解- 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 互操作语法作为
(.set b 0 10.5)
它会将“b”的第一个元素更新为 10.5。
但是,当我在“b”上调用其他一些方法时,例如
assign(double value)
作为
(.assign b 10.0)
将 b 的所有元素设置为 10.0,我得到一个 NoSuchMethodError。本质上,我似乎对某些互操作方法有正确的调用,但对其他方法则没有,而且我不确定自己做错了什么。
我尝试时看到同样的错误
(DenseDoubleLUDecomposition. A)
作为参考,这里是并行 colt javadoc ( http://incanter.org/docs/parallelcolt/api/ ) 注意,我使用的是稍微更新的并行 colt 版本。