DL4J的矩陣處理模組ND4J的常用函式整理
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等 |
相應的函式值,都是常用的計算函式 |