官网上的介绍是这样介绍的
ND4J是Java编写的开源、分布式深度学习项目,由总部位于旧金山的商业智能和企业软件公司Skymind牵头开发。团队成员包括数据专家、深度学习专家、Java程序员和具有一定感知力的机器人。
通过科学计算,分析师能够从大数据中挖掘出价值。我们认为,业内对深入理解和挖掘数据之货币价值的旅程才刚刚起步。因此,我们决定在Java虚拟机(JVM)环境下运用科学计算。
官方API文档: http://nd4j.org/cn/getstarted
也就是说它是在java上进行 科学计算 的一个模块
最直接粗暴的方法就是直接克隆一个例程
以下链接含所有的DL4J的例程
https://github.com/eclipse/deeplearning4j-examples
直接克隆这个项目,基本所有的环境都搭建完成了
或者使用maven配置
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7<</version>
</dependency>
创建一个全0的矩阵使用zeros方法
System.out.println("构造一个3行5列的全0 的ndarray");
INDArray zeros = Nd4j.zeros(3,5);
System.out.println(zeros);
System.out.println("===========================");
输出结果:
构造一个3行5列的全0 的ndarray
[[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]]
===========================
创建一个全1的矩阵使用ones方法来创建
System.out.println("构造一个3行5列的全1 的ndarray");
INDArray ones = Nd4j.ones(3,5);
System.out.println(ones);
System.out.println("===========================");
他的输出结果如下:
构造一个3行5列的全1 的ndarray
[[ 1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
[ 1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
[ 1.0000, 1.0000, 1.0000, 1.0000, 1.0000]]
===========================
使用rand方法来创建一个随机矩阵
System.out.println("构造一个3行5列的随机 的ndarray");
INDArray rand = Nd4j.rand(3,5);
System.out.println(rand);
System.out.println("===========================");
输出结果:
构造一个3行5列的随机 的ndarray
[[ 0.7856, 0.6902, 0.9957, 0.2112, 0.6514],
[ 0.2687, 0.9486, 0.2844, 0.5083, 0.0264],
[ 0.8163, 0.3329, 0.0089, 0.1918, 0.0853]]
===========================
创建一个服从高斯分布的矩阵(平均值为0,标准差为1)需要调用randn方法
System.out.println("构造一个3行5列的随机 的ndarray 并且服从高斯分布(平均值为0,标准差为1)");
INDArray randn = Nd4j.randn(3,5);
System.out.println(randn);
System.out.println("===========================");
输出结果如下:
构造一个3行5列的随机 的ndarray 并且服从高斯分布(平均值为0,标准差为1)
[[ -1.0227, 1.1948, -1.7703, -0.6445, -1.1990],
[ -1.7580, 0.9793, 1.7546, -0.9343, -0.8414],
[ -0.1830, 0.3517, 0.6258, -0.7261, -1.9069]]
===========================
根据数组来创建矩阵需要用create方法
第一个参数表示数据
第二个参数表示形状
(1,4)表示1行4列
(2,6)表示2行6列
System.out.println("====使用给定的数组来创建ndarray====");
//前面的表示数据,后面的表示形状
System.out.println("表示创建一个1行4列的 ndarray");
INDArray array1 = Nd4j.create(new float[]{2,2,2,2} ,new int[]{1,4});
System.out.println(array1);
System.out.println("表示创建一个3行3列的 ndarray");
INDArray array2 = Nd4j.create(new float[]{5,2,6,2,6,6,6,6,9},new int[]{3,3});
System.out.println(array2);
System.out.println("===========================");
输出结果:
====使用给定的数组来创建ndarray====
表示创建一个1行4列的 ndarray
[[ 2.0000, 2.0000, 2.0000, 2.0000]]
表示创建一个3行3列的 ndarray
[[ 5.0000, 2.0000, 6.0000],
[ 2.0000, 6.0000, 6.0000],
[ 6.0000, 6.0000, 9.0000]]
===========================
先来创建一个矩阵
INDArray nd = Nd4j.create(new float[]{1,2,3,4,5,6,7,8},new int[]{2,4});
System.out.println(nd);
/* 输出如下
* [[ 1.0000, 2.0000, 3.0000, 4.0000],
* [ 5.0000, 6.0000, 7.0000, 8.0000]]
*/
然后我们对他进行取值
//获取第2行第4列的double值
double value = nd.getDouble(1, 3);
System.out.println("value = " + value);
/* value = 8.0 */
现在对矩阵的值进行修改
//吧第1行第4列的值改为100
nd.putScalar(0,3,100);
System.out.println(nd);
/*
* [[ 1.0000, 2.0000, 3.0000, 100.0000],
* [ 5.0000, 6.0000, 7.0000, 8.0000]]
*/
获取矩阵的一行
//获取第2行的数据
INDArray row = nd.getRow(1);
System.out.println("row = " + row);
/* row = [ 5.0000, 6.0000, 7.0000, 8.0000] */
替换矩阵的一行数据
//替换第2行的数据
INDArray row2 = Nd4j.create(new float[] {2,4,6,8});
nd.putRow(1,row2);
System.out.println(nd);
/*
*[[ 1.0000, 2.0000, 3.0000, 100.0000],
* [ 2.0000, 4.0000, 6.0000, 8.0000]]
*/
//1*2
INDArray nd1 = Nd4j.create(new float[]{2,2},new int[]{1,2});
//2*1
INDArray nd2 = Nd4j.create(new float[]{3,3},new int[]{2,1});
//2*2
INDArray nd3 = Nd4j.create(new float[]{3,3,3,3},new int[]{2,2});
//2*2
INDArray nd4 = Nd4j.create(new float[]{4,4,4,4},new int[]{2,2});
System.out.println("nd1 = " + nd1);
System.out.println("nd2 = " + nd2);
System.out.println("nd3 = " + nd3);
System.out.println("nd4 = " + nd4);
/*
=================================
nd1 = [[ 2.0000, 2.0000]]
---------------------------------
nd2 = [[3.0000],
[3.0000]]
---------------------------------
nd3 = [[ 3.0000, 3.0000],
[ 3.0000, 3.0000]]
---------------------------------
nd4 = [[ 4.0000, 4.0000],
[ 4.0000, 4.0000]]
---------------------------------
*/
矩阵1[2,2] 加上 一个标量 6 = [8,8]
//给矩阵加上一个标量
INDArray add_num = nd1.add(6);
System.out.println(add_num);
/* [[ 8.0000, 8.0000]] */
矩阵3 + 矩阵 4
//矩阵与矩阵相加
INDArray add_NDArray = nd3.add(nd4);
System.out.println(add_NDArray);
/*
[[ 7.0000, 7.0000],
[ 7.0000, 7.0000]]
*/
给矩阵减去一个标量
//给矩阵减去一个标量
INDArray sub_num = nd1.sub(6);
System.out.println(sub_num);
/* [[ -4.0000, -4.0000]] */
矩阵减去一个矩阵
//矩阵减去一个矩阵
INDArray sub_NDArray = nd3.sub(nd4);
System.out.println(sub_NDArray);
/*
[[ -1.0000, -1.0000],
[ -1.0000, -1.0000]]
*/
矩阵1(1*2) 乘 矩阵2(2*1)
INDArray add = nd1.mmul(nd2);
System.out.println("add = " + add);
/* add = [[12.0000]] */
矩阵2(2*1) 乘 矩阵1(1*2)
INDArray add = nd2.mmul(nd1);
System.out.println("add = " + add);
/* add = [[ 6.0000, 6.0000],
[ 6.0000, 6.0000]] */
INDArray div_num = nd1.div(2);
System.out.println(div_num);
/* [[ 1.0000, 1.0000]] */
INDArray transpose = nd2.transpose();
System.out.println(transpose);
/*
nd2 = [[3.0000],
[3.0000]]
转置 = [[ 3.0000, 3.0000]] */
一些其他的详细操作,请看