您好,登錄后才能下訂單哦!
這篇文章主要講解了“ND4J的基本操作總結”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ND4J的基本操作總結”吧!
一、ND4J的在內存中的存儲結構
對于ND4J而言,所有的數據都存儲在堆外內存,是一維的連續內存,INDArray 只是指向了這片連續的內存空間,把連續內存映射成張量,ND4J定義了兩種排序規則:C order和F order,C order表示行優先,F order表示列優先。下圖展示了ND4J的內存存儲。
上圖可以看出,不過張量是幾維,對應的物理存儲都是一維的連續內存空間,NDArray在指向這片連續的地址,這正是ND4J強大的地方,對于各種矩陣操作,例如:矩陣轉置、矩陣加標量等等操作,都可以輕而易舉的實現,而不用花力氣去dup一個巨型數組,高性能也表現在這種優雅的設計方式上。
二、ND4J的基本操作
1、加法
INDArray add(INDArray other) :元素對應相加,返回的張量是拷貝出來的
INDArray addi(INDArray other) :元素對應相加,與上面不同的是,返回值不是拷貝出來的新數組,而是用計算結果替換原內存數據
INDArray add(Number n):每個元素加上一個標量
INDArray addi(Number n):每個元素加上一個標量,并覆蓋原數組
2、減法
INDArray sub(Number n):每個元素減去一個標量
INDArray subi(Number n):每個元素減去標量,并覆蓋原數組
INDArray sub(INDArray other):對應元素相減
INDArray subi(INDArray other):對應元素相減,并覆蓋原數組
3、乘法
乘法分兩種,對應元素相乘和矩陣乘法
INDArray mul(INDArray other):對應元素相乘
INDArray muli(INDArray other):對應元素相乘,并覆蓋原數組
INDArray mmul(INDArray other):矩陣相乘
INDArray mmuli(INDArray other):矩陣相乘,并覆蓋原數組
4、除法
INDArray div(INDArray other):對應元素相除
INDArray divi(INDArray other):對應元素相除并覆蓋原數組
INDArray div(Number n):每個元素除以一個標量
INDArray divi(Number n):每個元素除以一個標量,并覆蓋原數組
5、矩陣轉置
INDArray transpose()
INDArray transposei()
總結一下:后面以i結尾的方法,表示in place,也就是會覆蓋原內存空間的數據,和”傳引用“一個意思
6、張量創建
Nd4j類中定義了很多靜態方法,用于創建N維張量,用法例如: Nd4j.zeros(nRows, nColumns)
public static INDArray zeros(int rows, int columns) :創建一個全部元素為0的張量
public static INDArray ones(int rows, int columns) :創建一個全部元素為1的張量
public static INDArray hstack(INDArray... arrs):沿著水平方向接起多個矩陣,矩陣必須有相同的行
public static INDArray vstack(INDArray... arrs):沿著垂直方向接起多個矩陣,矩陣必須有相同的列
public static INDArray rand(int rows, int columns):隨機對應形狀的張量
public static INDArray rand(int[] shape):隨機對應形狀的張量
7、張量設置值
INDArray putScalar(int[] i, double value):對應位置設置標量
INDArray putScalar(int row, int col, double value):對應行列處設置標量
INDArray put(INDArrayIndex[] indices, INDArray element):對應維度處設置INDArray
8、其他操作
INDArray reshape(int... newShape):重新定義張量形狀
這里只是列舉了ND4J的一些常用操作,ND4J還定義了很多對應張量靈活的操作,例如求和、求平均、求最大值、求最小值、BooleanIndexing根據條件替換張量值、常用函數操作(sigmoid、tanh等等),要了解更多的詳情,可以深入去看DL4J的example或者單元測試,去體驗這個優秀的張量運算庫。
感謝各位的閱讀,以上就是“ND4J的基本操作總結”的內容了,經過本文的學習后,相信大家對ND4J的基本操作總結這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。