Breeze库API总结(Spark线性代数库)(转载)
導入
?
import breeze.linalg._ import breeze.numerics._?
Spark Mllib底層的向量、矩陣運算使用了Breeze庫,Breeze庫提供了Vector/Matrix的實現以及相應計算的接口(Linalg)。但是在MLlib里面同時也提供了Vector和Linalg等的實現。在使用Breeze庫時,需要導入相關包:
Import breeze.linalg._
Import breeze.numeric._
?
Breeze創建函數:
| 操作名稱 | Breeze函數 | 輸出結果 | 對應Numpy函數 |
| 全0矩陣 | DenseMatrix.zeros[Double](2,3) | 0.0 0.0 0.0 0.0 0.0 0.0 | zeros((2,3)) |
| 全0向量 | DenseVector.zeros[Double](3) | DenseVector(0.0,0.0,0.0) | zeros(3) |
| 全1向量 | DenseVector.ones[Double](3) | DenseVector(1.0,1.0,1.0) | ones(3) |
| 按數值填充向量 | DenseVector.fill(3){1.0} | DenseVector(1.0,1.0,1.0) | ones(3)*1.0 |
| 生成隨機向量 | DenseVector.range(start,end,step), Vector.rangeD(start,end,step) | DenseVector(1,3,5,7,9) | ? |
| 線性等分向量(用于產生Start, end之間的N點行矢量) | DenseVector.linspace(start,end,numvals) | ? | ? |
| 單位矩陣 | DenseMatr.eye[Double](3) | 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 | eye(3) |
| 對角矩陣 | Diag(DenseVector(1.0,2.0,3.0)) | 1.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 3.0 | diag((1.0,2.0,3.0)) |
| 按照行創建矩陣 | DenseMatrix((1.0,2.0),(3.0,4.0)) | 1.0 2.0 3.0 4.0 | array([[1.0,2.0],[3.0,4.0]]) |
| 按照行創建向量 | DenseVector(1,2,3,4) | [1 2 3 4] | array([1,2,3,4]) |
| 向量轉置 | DenseVector(1,2,3,4).t | [1 2 3 4]T | array([1 2 3 4]).reshape(-1,1) |
| 從函數創建向量 | DenseVector.tabulate(3){i => i*2} | [0 1 4] | ? |
| 從函數創建矩陣 | DenseMatrix.tabulate(3,2){case(i,j) => i+j} | 0 1 1 2 2 3 | ? |
| 從數組創建向量 | new DenseVector(array(1, 2, 3,4)) | [1 2 3 4] | ? |
| 從數組創建矩陣 | new DenseMatrix(2,3,array(11,12,13,21.22,23)) | 11 12 13 21 22 23 | ? |
| 0到1的隨機向量 | DenseVector.rand(4) | [0.0222 0.2231 0.5356 0.6902] | ? |
| 0到1的隨機矩陣 | DenseMatrix.rand(2,3) | 0.2122 0.3033 0.8675 0.6628 0.0023 0.9987 | ? |
?
Breeze元素訪問
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 指定位置 | a(0,1) | a[0,1] |
| 向量子集 | a(1 to 4), a(1 until 5), a.slice(1,5) | a[1:5] |
| 按照指定步長取子集 | a(5 to 0 by -1) | a[5:0:-1] |
| 指定開始位置至結尾 | a(1 to -1) | a[1:] |
| 最后一個元素 | a(-1) | a[-1] |
| 矩陣指定列 | a(::, 2) | a[:,2] |
?
Breeze元素操作
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 調整矩陣形狀 | a.reshape(3,2) | a.reshape(3,2) |
| 矩陣轉成向量 | a.toDenseVector(Makes copy) | a.flatten() |
| 復制下三角 | lowerTriangular(a) | tril(a) |
| 復制上三角 | upperTriangular(a) | triu(a) |
| 矩陣復制 | a.copy | np.copy(a) |
| 取對角線元素 | diag(a) | diagonal(a) |
| 子集賦數值 | a(1 to 4) := 5.0 | a[1:4]=5.0 |
| 子集賦向量 | a(1 to 4) := DenseVector(1.0,2.0,3.0) | a[1:4]=[1.0 2.0 3.0] |
| 矩陣賦值 | a(1 to 3, 1 to 3) := 5.0 | a[2:4, 2:4] = 5.0 |
| 矩陣列賦值 | a(::, 2) := 5.0 | a(:,3) = 5 |
| 垂直連接矩陣 | DenseMatrix.vertcat(a,b) | [a;b] |
| 橫向連接矩陣 | DenseMatrix.horzcat(a,b) | [a,b] |
| 向量連接 | DenseVector.vertcat(a,b) | [a b] |
?
Breeze數值計算函數
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 元素加法 | a + b | a + b |
| 元素乘法 | a :* b | a * b |
| 元素除法 | a :/ b | a / b |
| 元素比較 | a :< b | a < b |
| 元素相等 | a :== b | a == b |
| 元素追加 | a :+= 1.0 | a += 1 |
| 元素追乘 | a :*= 2.0 | a *= 2 |
| 向量點積 | a dot b, a.t * bT | dot(a,b) |
| 元素最大值 | max(a) | a.max() |
| 元素最大值及位置 | argmax(a) | a.argmax() |
?
Breeze求和函數
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 元素求和 | sum(a) | a.sum() |
| 每一列求和 | sum(a, axis._0), sum(a(::,*)) | sum(a,0) |
| 每一行求和 | sum(a,axis._1), sum(a(*, ::)) | sum(a,1) |
| 對角線元素和 | trace(a) | a.trace() |
| 累積和 | accumulate(a) | a.cumsum() |
?
Breeze布爾函數
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 元素與操作 | a :& b | a & b |
| 元素或操作 | a :| b | a | b |
| 元素非操作 | !a | ~a |
| 任意元素非零 | any(a) | any(a) |
| 所有元素非零 | all(a) | all(a) |
?
Breeze線性代數函數
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 線性求解 | a \ b | linalg.solve(a,b) |
| 轉置 | a.t | a.conj.transpose() |
| 求行列式 | det(a) | linalg.det(a) |
| 求逆 | inv(a) | linalg.inv(a) |
| 求偽逆 | pinv(a) | linalg.pinv(a) |
| 求范數 | norm(a) | norm(a) |
| 特征值和特征向量 | eigSym(a) | linalg.eig(a)[0] |
| 特征值 | val(er,ei,_) = eig(a)(實部與虛部分開) | lialg.eig(a)[0] |
| 特征向量 | eig(a)._3 | ? |
| 奇異值分解 | val svd.SVD(u,s,v) = svd(a) | linalg.svd(a) |
| 求矩陣的秩 | rank(a) | rank(a) |
| 矩陣長度 | a.length | a.size |
| 矩陣行數 | a.rows | a.shape[0] |
| 矩陣列數 | a.cols | a.shape[1] |
?
Breeze取整函數
| 操作名稱 | Breeze函數 | 對應Numpy函數 |
| 四舍五入 | round(a) | around(a) |
| 最小整數 | ceil(a) | ceil(a) |
| 最大整數 | floor(a) | floor(a) |
| 符號函數 | signum(a) | sign(a) |
| 取正數 | abs(a) | abs(a) |
?
BLAS向量-向量運算
| SROTG | Givens旋轉設置 |
| SROTMG | 改進Givens旋轉設置 |
| SROT | Givens旋轉 |
| SROTM | 改進Givens旋轉 |
| SSWAP | 交換x和y |
| SSCAL | 常數a乘以向量x() |
| SCOPY | 把x復制到y |
| SAXPY | 向量y+常數a乘以向量x(y = a*x + y) |
| SDOT | 點積 |
| SDSDOT | 擴展精度累積的點積 |
| SNRM2 | 歐氏范數 |
| SCNRM2 | 歐氏范數 |
| SASUM | 絕對值之和 |
| ISAMAX | 最大值位置 |
?
BLAS矩陣-向量運算
| SGEMV | 矩陣向量乘法 |
| SGBMV | 帶狀矩陣向量乘法 |
| SSYMV | 對稱矩陣向量乘法 |
| SSBMV | 對稱帶狀矩陣向量乘法 |
| SSPMV | 對稱填充矩陣向量乘法 |
| STRMV | 三角矩陣向量乘法 |
| STBMV | 三角帶狀矩陣向量乘法 |
| STPMV | 三角填充矩陣向量乘法 |
| STRSV | 求解三角矩陣 |
| STBSV | 求解三角帶狀矩陣 |
| STPSV | 求解三角填充矩陣 |
| SGER | A := alpha*x*y’?+ A |
| SSYR | A := alpha*x*x’?+ A |
| SSPR | A := alpha*x*x’?+ A |
| SSYR2 | A := alpha*x*y’?+ alpha*y*x’?+ A |
| SSPR2 | A := alpha*x*y’?+ alpha*y*x’?+ A |
?
BLAS矩陣-矩陣運算
| SGEMM | 矩陣乘法 |
| SSYMM | 對稱矩陣乘法 |
| SSYPK | 對稱矩陣的秩-k修正 |
| SSYR2K | 對稱矩陣的秩-2k修正 |
| STRMM | 三角矩陣乘法 |
| STRSM | 多重右端的三角線性方程組求解 |
?
?
?
?
?
?
| BLAS向量-向量運算 | ? |
| SROTG | Givens旋轉設置 |
| SROTMG | 改進Givens旋轉設置 |
| SROT | Givens旋轉 |
| SROTM | 改進Givens旋轉 |
| SSWAP | 交換x和y |
| SSCAL | 常數a乘以向量x() |
| SCOPY | 把x復制到y |
| SAXPY | 向量y+常數a乘以向量x(y?=?a*x?+?y) |
| SDOT | 點積 |
| SDSDOT | 擴展精度累積的點積 |
| SNRM2 | 歐氏范數 |
| SCNRM2 | 歐氏范數 |
| SASUM | 絕對值之和 |
| ISAMAX | 最大值位置 |
| ? | ? |
| BLAS矩陣-向量運算 | ? |
| SGEMV | 矩陣向量乘法 |
| SGBMV | 帶狀矩陣向量乘法 |
| SSYMV | 對稱矩陣向量乘法 |
| SSBMV | 對稱帶狀矩陣向量乘法 |
| SSPMV | 對稱填充矩陣向量乘法 |
| STRMV | 三角矩陣向量乘法 |
| STBMV | 三角帶狀矩陣向量乘法 |
| STPMV | 三角填充矩陣向量乘法 |
| STRSV | 求解三角矩陣 |
| STBSV | 求解三角帶狀矩陣 |
| STPSV | 求解三角填充矩陣 |
| SGER | A?:=?alpha*x*y’?+?A |
| SSYR | A?:=?alpha*x*x’?+?A |
| SSPR | A?:=?alpha*x*x’?+?A |
| SSYR2 | A?:=?alpha*x*y’?+?alpha*y*x’?+?A |
| SSPR2 | A?:=?alpha*x*y’?+?alpha*y*x’?+?A |
| ? | ? |
| BLAS矩陣-矩陣運算 | ? |
| SGEMM | 矩陣乘法 |
| SSYMM | 對稱矩陣乘法 |
| SSYPK | 對稱矩陣的秩-k修正 |
| SSYR2K | 對稱矩陣的秩-2k修正 |
| STRMM | 三角矩陣乘法 |
| STRSM | 多重右端的三角線性方程組求解 |
?
?
?
向量與向量
- 加:+?? ?減:-? ?點乘: ?:* ? 點除::/ ???向量乘法: * ?向量除法: /
矩陣與矩陣
- 加:+?? ?減:-? ?點乘: ?:*?? 點除::/ ? ? ? ?矩陣乘法: * ?矩陣除法: /
矩陣或向量與數值
- 加:+?? 減:- ???乘:* ???除:/ ?
矩陣和向量
- 加:+?? ?減:-???點乘: ?:*?? 點除::/ ? ? ? ?矩陣乘法: * ?矩陣除法: /
-
Matrix(*, ::)+Vector 逐行
- Matrix(::, *)+Vector 逐列
總結
以上是生活随笔為你收集整理的Breeze库API总结(Spark线性代数库)(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊高并发(四十)解析java.util
- 下一篇: spark向量矩阵的使用(scala)