數據分析入門之Numpy 矩陣與通用函數

1、創建Numpy矩陣

1.1、創建與組合矩陣

1.1.1、使用mat函數創建矩陣

import numpy as np

(1) 創建一個二維數組

np.array([[1,2],[3,4]])
array([[1, 2],
       [3, 4]])

(2) 創建一個矩陣

a = np.mat([[1,2],[3,4]])
a
matrix([[1, 2],
        [3, 4]])

1.1.2、使用matrix函數創建矩陣

b = np.matrix([[1,2],[3,4]])
b
matrix([[1, 2],
        [3, 4]])

1.1.3、使用bmat函數合成矩陣

np.bmat('a b')
matrix([[1, 2, 1, 2],
        [3, 4, 3, 4],
        [1, 2, 1, 2],
        [3, 4, 3, 4]])

1.2、矩陣的運算

  • 二維數組的乘法運算
a = [[1,2],[3,4]]
b = [[1,1],[1,2]]
np.array(a)*np.array(b)#對應位置相乘
array([[1, 2],
       [3, 8]])

1.2.1、舉證運算

(1) 查看兩個矩陣

print(np.mat(a))
print(np.mat(b))
[[1 2]
 [3 4]]
[[1 1]
 [1 2]]

(2) 矩陣相乘

np.mat(a) * np.mat(b)
matrix([[ 3,  5],
        [ 7, 11]])

結論: 橫x列之和,橫往右走,列往下走

  • 1x1+2x1=3
  • 1x1+2x2=5
  • 3x1+4x1=7
  • 3x1+4x2=11

(3) 用.dot對數組做矩陣乘法

np.array(a).dot(np.array(b))
array([[ 3,  5],
       [ 7, 11]])

1.3、矩陣特有屬性

(1) 屬性T 返回自身的轉置

print (np.matrix(a))
np.matrix(a).T
[[1 2]
 [3 4]]
matrix([[1, 3],
        [2, 4]])

(2) 屬性I 返回自身的逆矩陣

print (np.matrix(a))
np.matrix(a).I
[[1 2]
 [3 4]]
matrix([[-2. ,  1. ],
        [ 1.5, -0.5]])

(3) 屬性H 返回自身的共軛轉置

print (np.matrix(a))
np.matrix(a).H
[[1 2]
 [3 4]]
matrix([[1, 3],
        [2, 4]])

(4) 返回自身數據的2維數組的一個視圖

print (np.matrix(a))
np.matrix(a).A
[[1 2]
 [3 4]]
array([[1, 2],
       [3, 4]])


2、認識ufunc函數

  • 全稱通用函數(universal function),是一種能夠對數組中所有元素進行操作的函數。

• 四則運算:加(+)、減(-)、乘(*)、除(/)、冪(**)。數組間的四則運算表示對每個數組中的元素分別進行四則運算,所以形狀必須相同。
• 比較運算:>、<、==、>=、<=、!=。比較運算返回的結果是一個布爾數組,每個元素爲每個數組對應元素的比較結果。
• 邏輯運算:np.any函數表示邏輯“or”,np.all函數表示邏輯“and”。運算結果返回布爾值。

a
[[1, 2], [3, 4]]

2.1、如何把a全部平方?

[[j**2 for j in i] for i in a]
[[1, 4], [9, 16]]

a轉爲多維數組後做乘法:

np.array(a)**2
array([[ 1,  4],
       [ 9, 16]], dtype=int32)

2.2 ufunc函數的廣播機制

  • 廣播(broadcasting)是指不同形狀的數組之間執行算術運算的方式。需要遵循4個原則。

    1. 讓所有輸入數組都向其中shape最長的數組看齊,shape中不足的部分都通過在前面加1補齊。
    2. 輸出數組的shape是輸入數組shape的各個軸上的最大值。
    3. 如果輸入數組的某個軸和輸出數組的對應軸的長度相同或者其長度爲1時,這個數組能夠用來計算,否則出錯。
    4. 當輸入數組的某個軸的長度爲1時,沿着此軸運算時都用此軸上的第一組值。
a = [[0]*3,[1]*3,[2]*3,[2]*3]
a
[[0, 0, 0], [1, 1, 1], [2, 2, 2], [2, 2, 2]]

(1) 把a轉化爲數組

np.array(a)
array([[0, 0, 0],
       [1, 1, 1],
       [2, 2, 2],
       [2, 2, 2]])

(2) 數組相加運算

np.array(a) + np.array(a)
array([[0, 0, 0],
       [2, 2, 2],
       [4, 4, 4],
       [4, 4, 4]])

(3) 當數組長度不夠時,它會自動重複補齊

np.array(a) + np.array([[1],[2],[3],[4]])
array([[1, 1, 1],
       [3, 3, 3],
       [5, 5, 5],
       [6, 6, 6]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章