ND4J矩阵变换的常用函数整理
由本人阅读nd4j源码整理,nd4j是dl4j为了矩阵运算整出来的一套工具。对应python里的numpy,但是并没有numpy那么普及,不过至少使用dl4j搭建神经网络以及数据预处理时,会使用nd4j是必不可少的。
nd4j还有个功能是可以创建工作区workspace用来管理堆内存的回收,或者我们直接扔给GC来管理INDArray的内存回收就好。这个功能以后有机会再说,那么进入正题:
- 矩阵创建
方法 | 用法 |
Nd4j.zeros / ones / valueArrayOf
| 创建全部元素都是0/1/value的矩阵或向量 通用函数: valueArrayOf(int[] shape, double value) 实数版: complexValueOf |
Nd4j.create | 将double数组转化为N维向量 create(double [] data,int [] shape) 二维数组 Create(double [][] data) |
Nd4j.rand | 输出随机矩阵,(0,1)之间随机值 rand(int [] shape) rand(int [] shape, long seed) |
Nd4j.linspace | 输出数值等差的一维向量 |
Nd4j.diag | 以某个标量/向量/矩阵为对角生成对角矩阵 |
Nd4j.eye | 单位矩阵 |
- 矩阵属性
属性 | 用法 |
Rows,columns | 可以用getRow和getColumn获取某一行或者某一列的视图,并可以通过修改视图对原始数据进行局部修改。不想对原数据修改,可调用dup函数进行复制。 可以用rows和columns来获取有多少行多少列 |
shape | Int[] 返回每一维的维度 (Arrays.toString可用于打印维度) |
rank | 维数 |
length | 总共元素的个数(各个维度相乘) |
data() | 返回一个线性double数组替代这个INDArray |
- 矩阵数值变换、点积
方法 | 用法 |
get | get(INDArrayIndexes...indexes) 获取每一维的某几个index的数据组成的视图。对该视图的直接操作将影响原始数据。 |
subArray | offset,shape ,stride 返回子图 |
addi add sub rsub mul div rdiv neg eq | 标量的加减乘除取负比较等等, 后面加i代表in_place就是替换原数据的意思。 前面加r就是用参数来减、除矩阵中的value。 对每个矩阵中的值做操作,都是标量计算。 add和mul参数可以传入和被操作数大小相同的矩阵,即两个矩阵对应的每个参数相加或相乘 |
put | 替换矩阵中的某些值 |
putscalar | 标量替换某些值 |
reshape | 将矩阵变换为新的维数和维度的矩阵,但是length要保证相等 参数order是’c’/’f’ 用C样索引顺序读取/写入元素,最后一个轴索引变化最快,回到第一个轴索引变化最慢。'F'意味着使用Fortran样索引顺序读取/写入元素,第一个索引变化最快,最后一个索引变化最慢。 上面这个是numpy中reshape的Order参数的含义,在Nd4j中应该雷同 |
permute/permutei | 改变矩阵中维度的顺序 |
transpose/transposei | 转置 |
linearView | 返回展开成一维矩阵 |
- 矩阵的拼接
方法 | 用法 |
Nd4j.hstack | 横向拼接矩阵(row相同) |
Nd4j.vstack | 纵向拼接矩阵(column相同) |
concat | 指定维度拼接 concat(int dimension, INDArray... toConcat)
|
|
|
|
|
|
|
|
|
- 矩阵的叉乘以及元素运算等
方法 | 用法 |
mmul | 矩阵叉乘,注意两个相乘矩阵的行列对应关系。前者的列数等于后者的行数 |
BooleanIndexing.and/or | 通过传入函数以及范围来返回bool值对矩阵元素进行判断 |
BooleanIndexing.applyWhere/replaceWhere | 对满足条件的矩阵中的值进行替换或其他操作 |
max/min/sum amax | 指定维度的max、min、sum等 前面加a是absolute绝对值的意思 |
sigmond/abs/tanh/exp/sqrt/log等 | 相应的函数值,都是常用的计算函数 |
|
|
|
|