寫在前面:這篇部落格內容介紹的比較簡單的基本知識,適合python和機器學習零基礎的人看,如果讀者對numpy比較了解的話,可以pass。
- numpy
numpy是python的乙個科學計算的庫,提供了矩陣運算的功能,之前提到的梯度下降法每次迭代都需要遍歷所有的資料,大大降低的程式的運算速度,如果換成矩陣運算的話將會使效率提公升很多,這個時候我們就要使用到numpy的庫函式了。numpy裡功能較多,這篇部落格就簡單介紹比較基礎基礎的知識,
大家可以參考python中numpy入門,學習一下基本的矩陣運算,也可以參考numpy詳細介紹,本篇部落格參考的內容都在上面的鏈結裡。
-array多維陣列
numpy的主要物件是同種元素的多維陣列。這是乙個所有的元素都是一種型別、通過乙個正整數元組索引的元素**(通常是元素是數字)。在numpy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。
例如,在3d空間乙個點的座標[1, 2, 3]是乙個秩為1的陣列,因為它只有乙個軸。那個軸長度為3.又例如,在以下例子中,陣列的秩為2(它有兩個維度).第乙個維度長度為2,第二個維度長度為3。可以簡單理解為兩行三列,但這個還不是矩陣,僅為了理解方便。
[[ 1., 0., 0.],
[ 0., 1., 2.]]
numpy裡多維陣列型別為numpy.ndarray
使用numpy.array方法
以list或tuple變數為引數產生一維陣列:
print np.array([1,2,3,4])[12
34]print np.array((1.2,2,3,4))
[ 1.2
2.3.
4. ]
print type(np.array((1.2,2,3,4)))
type 'numpy.ndarray'
#以list變數為元素產生二維陣列:
print np.array([[1,2],[3,4]])
[[12]
[34]]
生成陣列的時候還可以指定資料型別:
print np.array((1.2,2,3,4), dtype=np.int32)[12
34]
同時也可以用numpy裡的函式建立全是0或者全是1的陣列:
print(np.zeros([3,4]))
[[ 0.
0.0.
0.] [ 0.
0.0.
0.] [ 0.
0.0.
0.]]
print(np.ones([3,4]))
[[ 1.
1.1.
1.] [ 1.
1.1.
1.] [ 1.
1.1.
1.]]
利用arange建立陣列:
import numpy as np
#一維陣列
print np.arange(15)
[ 0123
4567
891011
1213
14]print type(np.arange(15))
'numpy.ndarray'>
#使用reshape函式給予陣列乙個新的形狀,而不改變它的資料
#二維陣列
print np.arange(15).reshape(3,5)
[[ 012
34][ 567
89][10
1112
1314]]
#三維陣列
c = np.arange(24).reshape(2,3,4) # 3d array
print c
[[[ 012
3] [ 456
7] [ 8910
11]]
[[12
1314
15] [16
1718
19] [20
2122
23]]]
print type(np.arange(15).reshape(3,5))
'numpy.ndarray'>
用linspace建立陣列,看下例子就知道什麼意思了
import numpy as np
c = np.linspace(0,3,10)#建立陣列,從0開始,間隔3,建立10個數
print c
[0,3,6,9,12,15,18,21,24,27]
基本運算
陣列的算術運算是按元素的。新的陣列被建立並且被結果填充。
import numpy as np
a = np.array( [1,2,3,4] )
b = arange( 4 )
print b
array([0, 1, 2, 3])
c = a-b
print c
array([1, 1, 1, 1])
b**2
array([0, 1, 4, 9])
10*sin(a)
array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854])
a<35
array([true, true, false, false], dtype=bool)
numpy中的乘法運算子*指示按元素計算,矩陣乘法可以使用dot函式或建立矩陣物件實現
a = array( [[1,1],[0,1]] )
b = array( [[2,0],[3,4]] )
print (a*b)
[[2, 0],
[0, 4]]
print (dot(a,b))
[[5, 4],
[3, 4]]
numpy裡matrix和array的區別
之前的部落格logistic回歸python實現裡的**出現了矩陣和array相關的語句,初學的時候還是有點困惑的,這裡講一下matrix和array的區別,大家可參考論numpy中matrix和array的區別這篇部落格來詳細學習下,一下內容參考該部落格。
上面咱們看到numpy裡的array可以建立矩陣,numpy裡還有mat()就是將array矩陣化matrix。有人就會疑問,上面還說array可以直接建立矩陣,怎麼又出來乙個矩陣化。其實在numpy裡matrices有個條件就是,必須是2維的;但是 numpy arrays (ndarrays) 可以是多維的(1d,2d,3d····nd)。matrix就是array的乙個子集。matrix 擁有array的所有特性。
在numpy中matrix的主要優勢是:相對簡單的乘法運算符號。例如,a和b是兩個matrices,那麼a*b,就是矩陣積。
import numpy as np
a=np.mat('4 3; 2 1')
b=np.mat([[1,2],[3,4]])#兩種表示方法,,''均可以
print(a)
[[43]
[21]]
print(b)
[[12]
[34]]
print(a*b)#在array裡計算矩陣需要用dot(),這裡直接可以用*
[[13
20][ 5
8]]
**運算子作用也不同,matrix是矩陣相乘,array裡則是對應的元素與元素相乘。因此,在寫**的時候array和matrix一定不要混淆,不然很容易出錯。 機器學習 numpy庫的學習
import numpy as np import random 處理數值型的資料 使用numpy生成陣列,型別為ndarray t1 np.array 1 2,3 print t1 print type t1 t2 np.array range 10 print t2 full填充元素 np.fu...
機器學習預備 numpy
引入 import numpy as np numpy 資料結構 ndarray numpy 使用的陣列類是 ndarray 一些重要屬性如下 ndarray.ndim 維數 ndarray.shape 返回 n,m n行 m列 ndarray.dtype 型別 numpy 資料結構 mat mat...
python機器學習 Numpy
numpy是python語言的乙個擴充程式庫。支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。numpy內部解除了python的pil 全域性直譯器鎖 運算效率極好,是大量機器學習框架的基礎庫 arr np.array 1 2,3 4,5 arr.shape 顯示的是維數,...