import breeze.linalg._
import breeze.numerics._
Spark Mllib底層的向量、矩陣運算使用了Breeze庫,Breeze庫提供了Vector/Matrix的實現以及相應計算的接口(Linalg)。可是在MLlib裏面同時也提供了Vector和Linalg等的實現。在使用Breeze庫時,須要導入相關包:數組
Import breeze.linalg._函數
Import breeze.numeric._spa
Breeze建立函數:code
操做名稱orm |
Breeze函數blog |
輸出結果接口 |
對應Numpy函數table |
全0矩陣class |
DenseMatrix.zeros[Double](2,3)angular |
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 | 多重右端的三角線性方程組求解 |