1. 程式人生 > >DL4J的矩陣處理模組ND4J的常用函式整理

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等

相應的函式值,都是常用的計算函式