在Java中,将NDArray y添加到x中是向前推进的。
NDManager manager = NDManager.newBaseManager();
NDArray x = manager.create(3f);
NDArray y = manager.create(2f);
x.add(y);
在 Clojure 中
(def ndm (nd/base-manager))
(def x (nd/create ndm 3.))
(def y (nd/create ndm 2.))
(nd/+ x y) ;; Error
;; This NDArray implementation does not currently support this operation
在 clojure 中实现相同的函数时,编译器永远不知道 array0 和 array1 是 NDArray 的变量,也永远不知道使用函数 NDArray.add 将 NDArray y 添加到 x 中。请告知如何在 clojure 中实现运算符添加“+”。
(ns djl.ndarray
(:import [ai.djl.ndarray NDArray])
(:refer-clojure :exclude [+ - / *
= <= < >= >
identity to-array
min max concat
get set
flatten
sort]))
(defn + [array0 array1]
(.add array0 array1))
对我有用。查看 scicloj/clj-djl 源 了解实现细节。
(ns stack-overflow-3.djl
(:require
[clj-djl.ndarray :as nd]))
(let [manager (nd/new-base-manager)
v1 (nd/create manager [5])
v2 (nd/create manager [13])]
(nd/+ v1 v2))