1

我一直在尝试使用 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 版本。

4

1 回答 1

1

我已经想出了如何让它发挥作用。我使用的是 parallel-colt 0.10.0,当我升级到 0.10.1 版本时,一切都按预期工作。

希望这可以帮助某人。

于 2015-04-07T18:33:40.990 回答