1. 程式人生 > >Numpy學習筆記:np.array()常用操作

Numpy學習筆記:np.array()常用操作

    NumPy是Python語言的一個擴充程式庫。支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫。Numpy內部解除了Python的PIL(全域性直譯器鎖),運算效率極好,是大量機器學習框架的基礎庫!

1.np.array建構函式

用法:np.array([1,2,3,4,5])
1.1 numpy array 和 python list 有什麼區別?

標準Python的列表(list)中,元素本質是物件。如:L = [1, 2, 3],需要3個指標和三個整數物件,對於數值運算比較浪費記憶體和CPU。因此,Numpy提供了ndarray(N-dimensional array object)物件:儲存單一資料型別的多維陣列。

1.2 如何強制生成一個 float 型別的陣列

d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], dtype=np.float)

d = np.array([1, 2, 3, 4,5, 6, 7, 8], dtype=np.float)
print(d)

#[1. 2. 3. 4. 5. 6. 7. 8.]      

1.3 使用astype(int)對上述 array 進行強制型別轉換

d.astype(int)

1.4.dtype 和type 的區別是什麼

type(d) 和 d.dtype 一個返回的是d 的資料型別 nd.array 另一個返回的是陣列中內容的資料型別

2. arange

用法 :np.arange(0,10)  // 生成[0 1 2 3 4 5 6 7 8 9] 左開右閉不包括10

2.1.arange 和python 的range 函式的區別是什麼 

arange可以生成浮點型別,而range只能是整數型別

import numpy as np
print(np.arange(0,10))
print(list(range(0,10)))

#[0 1 2 3 4 5 6 7 8 9]
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

3. reshape

np.arange(1,10).reshape((3,3)) 從(3,4)改為(4,3)並不是對陣列進行轉置,而只是改變每個軸的大小,陣列元素在記憶體中的位置並沒有改變

reshape(-1,1) 任一行一列

4. 構造等差數列
np.linspace(1, 10, 10)


#構造等差數列 開始值,結束值,共幾個數字 

#包括終止值 [1,2,3,4,5,6,7,8,9,10]

 #可以通過選項配置其不包括終止值

c=np.linspace(1, 10, 10, endpoint=False)

5.構造等比數列
np.logspace(1,4,4,base=2,endpoint=True)

6.隨機數生成

6.1隨機生成(4*4)個0-10的數的二維陣列

np.random.randint(a, b, size=(c, d))

6.2.隨機生成 0-1的10個數字

 np.random.rand 

7.np.array 的陣列切片

a.切片規則 [三冒號規則]

  [開始:結尾:步長]

b.開始為-1

 a[-1] 取最後一個

 a = [0,1,2,3,4,5,6,7]

 a[-1] = 7

c.結尾為-1(開始必須為大於等於0的數)

 a[2:-1] = [2,3,4,5,6]

d.步長為-1,意味著反轉

 a[::-1]=[7,6,5,4,3,2,1]

8.特殊矩陣的生成
np.ones((3,3))、np.zeros((3,3))、np.eye(1,1) 奇怪的是 eye 為啥不接收元祖作為引數呢?暈 eye 也沒有 寫成eye

還有 a=[1,2,3] np.diag(a) 是生成1,2,3 為對角線的方陣

9.陣列的運算及矩陣的運算
a.陣列的相加,相當的隨意,不用一樣的行和列
a = np.array([1,2,3,4,5])

b = a.reshape(-1,1)
a+b 返回的是一個 5*5 的矩陣
b.矩陣的加法必須是行列相同
a = np.matrix(np.array([[1,2,3],[2,1,3]]));

a.T 表示轉置 a.I 表示逆矩陣
c.對應元素相乘用 multiple矩陣相乘可直接寫,但行和列要相等

a1=mat([1,1]); a2=mat([2,2]); a3=multiply(a1,a2)