理論
python列表與numpy數組的區別
使用Python列表可以存儲一維數組,通過列表的嵌套可以實現多維數組。而numpy使用ndarray對象來處理多維數組,該對象是一個快速而靈活的大數據容器,存儲效率和輸入輸出性能遠優於Python中的嵌套列表。通常Numpy數組中的所有元素的類型都是相同的,而Python列表中的元素類型是任意的,因此在通用性能方面Numpy數組不及Python列表,但在科學計算中使用方面要比Python列表簡單的多。
Numpy數組和矩陣的區別
- 矩陣必須是二維的,而數組可以是一維到任意維。
- 矩陣的主要優勢是:相對簡單的乘法運算符號
- 矩陣和數組都可以通過objects后面加
.T
得到其轉置。但是矩陣還可以在后面加.H
得到共軛矩陣, 加.I
得到逆矩陣 - 相反的是在numpy里面數組遵從逐個元素的運算,所以對於數組c 和d的
c*d
運算相當於matlab里面的c.*d
運算。而矩陣相乘,則需要numpy里面的dot
示例
一維數組的輸出
如下,對於一維數組的輸出都是不同的
m_list=[1,2] # 結果為[1,2]
m_arr=np.array(m_list) # [1 2]
m_mat=np.mat(m_list) # [[1 2]],因為矩陣必須二維
二維數組的輸出
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
結果為:
[[1, 2], [3, 4]]
[[1 2]
[3 4]]
[[1 2]
[3 4]]
其中數組和矩陣的數組在形式上是相同的,但是數組的維度會發生變化。
數組的維度會發生變化
做歸約運算時,數組的維度會發生變化,比如平均運算:
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
print(m_arr.mean(1))
print(m_mat.mean(1))
結果如下:
[1.5 3.5]
[[1.5]
[3.5]]
同理,在獲取某一行或某一列數據的時候也不一樣:
m_list=[[1,2],[3,4]]
m_arr=np.array(m_list)
m_mat=np.mat(m_list)
print(m_arr[:,1]) #獲取第二列元素
print(m_mat[:,1])
結果為:
[2 4]
[[2]
[4]]