python中的numpy包是乙個科學計算包,在進行科學計算時多數情況下都會用到這個包,但是其中的array和mat這兩個函式的區別還是要注意。資料的型別很有可能是程式出現bug的乙個難以發現的原因(自身教訓)
if __name__ == '__main__':
# 一維
two = [1, 3, 5, 2, 3, 2]
two1 = np.array(two)
print(two) # [1, 3, 5, 2, 3, 2] type:list
print(two1) # [1 3 5 2 3 2] type:tuple
print(two1.shape) # (6,)
print(two1.tolist()) # [1, 3, 5, 2, 3, 2] type:list
print(len(two1.tolist())) # 6
two2 = np.mat(two)
print(two2) # [[1 3 5 2 3 2]] type:tuple
print(two2.shape) # (1, 6)
print(two2.tolist()) # [[1, 3, 5, 2, 3, 2]] type:list
print(len(two2.tolist())) # 1
可以看到array和mat還是有所不同的。
所以在使用命令tolist
進行對array轉換後可以轉換成原來的樣子,對mat型別轉換後會和原來有所不同。
這裡的區別在1維情況下表現的很明顯。對於下面的多緯情況沒啥差別。
對於多維的list,array和mat基本沒有差別:但是在 * 操作時候是有差別的
# 多維陣列
two = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
two1 = np.array(two)
print(two)
'''[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''print(two1)
'''[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''print(two1.shape) # (5, 4)
print(two1.tolist())
'''[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''print(len(two1.tolist())) # 5
two2 = np.mat(two)
print(two2)
'''[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''print(two2.shape) # (5, 4)
print(two2.tolist())
'''[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''print(len(two2.tolist())) # 5
two3=two1.t # 陣列轉置
two4=two2.t # 矩陣轉置
y=two1 * two1 # 陣列相乘:各元素對應相乘
'''[[ 1 4 9 16]
[ 25 36 49 64]
[ 81 100 121 144]
[169 196 225 256]
[289 324 361 400]]
'''#y1 = np.dot(two1, two1) # dot()函式是矩陣乘,而*則表示逐個元素相乘; 5x4 和 5x4 矩陣乘報錯
y1 = np.dot(two1, two1.t) # 可以將two1其轉置 然後矩陣乘
'''[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''y4 = two2 * two2.t # 矩陣相乘:等同於 p.dot(two2, two2.t)
'''[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''
matrix是array的分支,matrix和array在很多時候都是通用的,你用哪乙個都一樣。但這時候,官方建議大家如果兩個可以通用,那就選擇array,因為array更靈活,速度更快,很多人把二維的array也翻譯成矩陣。參考部落格:但是matrix的優勢就是相對簡單的運算符號,比如兩個矩陣相乘,就是用符號*,但是array相乘不能這麼用,得用方法.dot()
array的優勢就是不僅僅表示二維,還能表示3、4、5…維,而且在大部分python程式裡,array也是更常用的。
x[:,0]就是取矩陣x的所有行的第0列的元素,x[:,1] 就是取所有行的第1列的元素。
x[:, m:n]即取矩陣x的所有行中的的第m到n-1列資料,含左不含右。
x[0,:]就是取矩陣x的第0行的所有元素,x[1,:]取矩陣x的第一行的所有元素。
print(two1[0,:])
'''[1 2 3 4]
'''print(two2[:,0])
'''[[ 1]
[ 5]
[ 9]
[13]
[17]]
'''
python庫numpy的使用
python在構造機器學習應用程式時,numpy作為乙個重要的函式庫會被經常使用,裡面有便捷的向量和矩陣的計算函式 from numpy import 構造4 4的隨機矩陣 matrix mat random.rand 4,4 矩陣逆矩陣 invmat matrix.i 單位矩陣 matrix ma...
numpy包的安裝
2,配置python環境變數 在電腦的系統屬性的系統變數path中新增python的安裝路徑,如在path中加入 f python34 f python34 scripts 3,使用pip 指令安裝numpy包 3.1 開啟dos命令輸入 pip install numpy 就會自動安裝 時間有點久...
小白 日常 Python安裝Numpy包
anyway,應該也有像我一樣的python小白需要這種step by step的安裝doc。希望能幫助到大家!1.以windows環境下為例,將安裝到本地的numpy 1.11.3 mkl cp27 cp27m win32.whl放到python的scripts資料夾下 2.win r開啟執行介面...