ND4J¶
N-Dimensional Arrays for Java(ND4J)は、N次元配列を扱うオープンソースの科学計算ライブラリで、PythonのNumPyを参考に作られています。開発元は、Skymind社です。ネイティブライブラリを含み、また、GPGPUを用いて計算することができます。Githubでホストされています。
入手と設定¶
ND4Jの公式サイト から、Get Startedのリンクをたどるとインストールの説明が参照できます。maven前提の説明となっています。
CPUで実行する用とGPUで実行する用とで指定するライブラリ名が変わります。
- CPUで実行する場合、nd4j-native-platform を指定します。
maven¶
nd4j-native-platform¶
<properties>
<nd4j.version>0.7.2</nd4j.version>
</properties>
:
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>${nd4j.version}</version>
</dependency>
Ant¶
Antで使用するためのライブラリ入手¶
mavenリポジトリから、nd4j-native-platform-0.7.2.jar をダウンロードしてみたところ、jarファイルの中には、pom.xmlだけが含まれ、Javaのコードは含まれていませんでした。このpomを紐解くと、nd4j-nativeに依存しているようです。
次にmavenリポジトリから、nd4j-native-0.7.2.jar をダウンロードしてみました。jarファイルの中には、classファイルとpom.xmlも含まれています。このpom.xmlはかなり複雑で依存関係が紐解き難いので、jdepsコマンドでnd4j-native-0.7.2.jarを検査してみました。
jdepsコマンドの実行結果 表示隠す
$ jdeps nd4j-native-0.7.2.jar
nd4j-native-0.7.2.jar -> C:\Program Files\Java\jdk1.8.0_112\jre\lib\rt.jar
nd4j-native-0.7.2.jar -> 見つかりません
org.nd4j.linalg.cpu.nativecpu (nd4j-native-0.7.2.jar)
-> java.io
-> java.lang
-> java.util
-> java.util.concurrent
-> java.util.concurrent.atomic
-> org.apache.commons.math3.util 見つかりません
-> org.bytedeco.javacpp 見つかりません
-> org.nd4j.linalg.api.blas 見つかりません
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.linalg.api.complex 見つかりません
-> org.nd4j.linalg.api.concurrency 見つかりません
-> org.nd4j.linalg.api.ndarray 見つかりません
-> org.nd4j.linalg.api.ops.executioner 見つかりません
-> org.nd4j.linalg.api.shape 見つかりません
-> org.nd4j.linalg.cache 見つかりません
-> org.nd4j.linalg.compression 見つかりません
-> org.nd4j.linalg.cpu.nativecpu.blas nd4j-native-0.7.2.jar
-> org.nd4j.linalg.cpu.nativecpu.complex nd4j-native-0.7.2.jar
-> org.nd4j.linalg.factory 見つかりません
-> org.nd4j.linalg.io 見つかりません
-> org.nd4j.linalg.memory 見つかりません
-> org.nd4j.linalg.util 見つかりません
-> org.nd4j.nativeblas 見つかりません
-> org.slf4j 見つかりません
org.nd4j.linalg.cpu.nativecpu.blas (nd4j-native-0.7.2.jar)
-> java.lang
-> java.nio
-> org.bytedeco.javacpp 見つかりません
-> org.nd4j.linalg.api.blas 見つかりません
-> org.nd4j.linalg.api.blas.impl 見つかりません
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.linalg.api.complex 見つかりません
-> org.nd4j.linalg.api.ndarray 見つかりません
-> org.nd4j.linalg.api.ops 見つかりません
-> org.nd4j.linalg.api.ops.aggregates 見つかりません
-> org.nd4j.linalg.api.ops.aggregates.impl 見つかりません
-> org.nd4j.linalg.api.ops.executioner 見つかりません
-> org.nd4j.linalg.api.ops.impl.accum 見つかりません
-> org.nd4j.linalg.factory 見つかりません
-> org.nd4j.nativeblas 見つかりません
org.nd4j.linalg.cpu.nativecpu.cache (nd4j-native-0.7.2.jar)
-> java.lang
-> java.util
-> java.util.concurrent
-> java.util.concurrent.atomic
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.linalg.cache 見つかりません
-> org.nd4j.linalg.factory 見つかりません
org.nd4j.linalg.cpu.nativecpu.complex (nd4j-native-0.7.2.jar)
-> java.lang
-> java.util
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.linalg.api.complex 見つかりません
-> org.nd4j.linalg.api.ndarray 見つかりません
-> org.nd4j.linalg.cpu.nativecpu nd4j-native-0.7.2.jar
org.nd4j.linalg.cpu.nativecpu.ops (nd4j-native-0.7.2.jar)
-> java.lang
-> java.util
-> org.apache.commons.math3.util 見つかりません
-> org.bytedeco.javacpp 見つかりません
-> org.nd4j.linalg.api.blas 見つかりません
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.linalg.api.complex 見つかりません
-> org.nd4j.linalg.api.ndarray 見つかりません
-> org.nd4j.linalg.api.ops 見つかりません
-> org.nd4j.linalg.api.ops.aggregates 見つかりません
-> org.nd4j.linalg.api.ops.executioner 見つかりません
-> org.nd4j.linalg.api.ops.impl.accum 見つかりません
-> org.nd4j.linalg.api.rng 見つかりません
-> org.nd4j.linalg.api.shape 見つかりません
-> org.nd4j.linalg.cache 見つかりません
-> org.nd4j.linalg.cpu.nativecpu nd4j-native-0.7.2.jar
-> org.nd4j.linalg.exception 見つかりません
-> org.nd4j.linalg.factory 見つかりません
-> org.nd4j.linalg.util 見つかりません
-> org.nd4j.nativeblas 見つかりません
-> org.slf4j 見つかりません
org.nd4j.linalg.cpu.nativecpu.rng (nd4j-native-0.7.2.jar)
-> org.bytedeco.javacpp 見つかりません
-> org.nd4j.linalg.api.buffer 見つかりません
-> org.nd4j.nativeblas 見つかりません
-> org.nd4j.rng 見つかりません
org.nd4j.nativeblas (nd4j-native-0.7.2.jar)
-> java.lang
-> java.nio
-> org.bytedeco.javacpp 見つかりません
-> org.bytedeco.javacpp.annotation 見つかりません
-> org.bytedeco.javacpp.tools 見つかりません
いったん、mavenで依存するライブラリをダウンロードさせることとします。
次のダミーのpomファイルを記述します。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://mave.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>0.1</version>
<dependencies>
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native</artifactId>
<version>0.7.2</version>
</dependency>
</dependencies>
</project>
依存関係のartifactを指定のディレクトリにダウンロードさせます。
work$ mvn dependency:copy-dependencies -DoutputDirectory=lib
:
work$ ls lib
annotations-2.0.1.jar nd4j-native-0.7.2.jar
commons-io-2.4.jar nd4j-native-0.7.2-windows-x86_64.jar
commons-lang3-3.3.1.jar nd4j-native-api-0.7.2.jar
commons-math3-3.4.1.jar openblas-0.2.19-1.3.jar
guava-18.0.jar openblas-0.2.19-1.3-android-arm.jar
jackson-0.7.2.jar openblas-0.2.19-1.3-android-x86.jar
javacpp-1.3.1.jar openblas-0.2.19-1.3-linux-ppc64le.jar
javassist-3.19.0-GA.jar openblas-0.2.19-1.3-linux-x86_64.jar
joda-time-2.2.jar openblas-0.2.19-1.3-macosx-x86_64.jar
lombok-1.16.10.jar openblas-0.2.19-1.3-windows-x86_64.jar
nd4j-api-0.7.2.jar reflections-0.9.10.jar
nd4j-buffer-0.7.2.jar slf4j-api-1.7.10.jar
nd4j-common-0.7.2.jar snakeyaml-1.12.jar
nd4j-context-0.7.2.jar stax2-api-3.1.4.jar
gradle¶
mavenリポジトリを利用し、nd4j-native-platformを依存関係に指定します。
repositories {
mavenCentral()
}
dependencies {
compile 'org.nd4j:nd4j-native-platform:0.7.2'
}
最初、ND4Jの公式ドキュメント にある次の記述をしたところ、エラーとなってしまいました。
repositories {
mavenCentral()
}
dependencies {
compile 'org.nd4j:nd4j-native-platform:'
}
エラーメッセージ
* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
> Could not find org.nd4j:nd4j-native-platform:.
Searched in the following locations:
https://repo1.maven.org/maven2/org/nd4j/nd4j-native-platform//nd4j-native-platform-.pom
https://repo1.maven.org/maven2/org/nd4j/nd4j-native-platform//nd4j-native-platform-.jar
Required by:
project :
バージョン番号を省略することはできないようです。