1. 元素級別的函式
元素級別的函式也就是函式對陣列中的每一個元素進行運算。例如:
In [10]: arr = np.arange(10) In [11]: np.sqrt(arr) Out[11]: array([ 0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) In [12]: np.exp(arr) Out[12]: array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01, 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03, 2.98095799e+03, 8.10308393e+03])
一元函式(接受一個陣列引數)
二元函式:
2. 陣列級別的函式
陣列級別的函式一般是一些統計函式,像聚合類的函式求和(sum),求平均(mean)等。
In [16]: arr = np.arange(32).reshape(8,4) In [17]: arr.mean() Out[17]: 15.5 In [18]: arr.sum() Out[18]: 496 # 求每一行的平均數 In [19]: arr.mean(axis = 1) Out[19]: array([ 1.5, 5.5, 9.5, 13.5, 17.5, 21.5, 25.5, 29.5]) # 求每一列的和 In [20]: arr.sum(0) Out[20]: array([112, 120, 128, 136])
3. 布林陣列的函式
在用上述的函式計算的時候,True為1,False為0,所以:
In [5]: arr Out[5]: array([ 0.85760541, -0.41721765, -1.42905838, -0.33368523, 0.4434428 , -1.14905993, -1.97609581, -2.00071844, 0.08234022, 0.3282299 ]) In [6]: (arr > 0).sum() Out[6]: 4 In [7]: type((arr > 0)) Out[7]: numpy.ndarray In [8]: arr > 0 Out[8]: array([ True, False, False, False, True, False, False, False, True, True], dtype=bool)
any() 函式: 只有有一個為True,返回結果為True
all() 函式: 所有值都為True的時候,結果才為True
In [9]: arr_temp = (arr > 0) In [10]: arr_temp Out[10]: array([ True, False, False, False, True, False, False, False, True, True], dtype=bool) In [11]: arr_temp.any() Out[11]: True In [12]: arr_temp.all() Out[12]: False
4. 集合函式
In [17]: arr = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) In [18]: np.unique(arr) Out[18]: array([1, 2, 3, 4])
5. 資料讀寫函式
Numpy可以將資料儲存以及讀取文字檔案以及二進位制檔案。
5.1 以二進位制方式儲存資料
numpy.save 以及 numpy.load 函式可以分別在磁碟上儲存和載入資料。 陣列預設是以未壓縮的原始二進位制格式儲存在以.npy為字尾名的檔案中。
In [25]: arr = np.arange(10) # 儲存arr中的資料 In [26]: np.save("arrays",arr) # 檢視資料 In [27]: !ls -l arrays.npy -rw-rw-r--. 1 amei amei 160 9月 23 19:03 arrays.npy
# 載入檔案中的資料
In [29]: np.load("arrays.npy")
Out[29]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
也可以用 numpy.savez 將多個陣列儲存到一個壓縮的歸檔檔案中,在讀取時候可以進行延遲載入
In [31]: np.savez("archive.npz",a = arr, b = arr ) In [32]: !ls -l archive.npz -rw-rw-r--. 1 amei amei 514 9月 23 19:11 archive.npz In [33]: arch = np.load("archive.npz") # 根據需要讀取陣列內容 In [34]: arch["b"] Out[34]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
5.2 文字檔案的讀寫
暫無。。。
6. 線性代數函式
import numpy.linalg 之後就可以呼叫以下函式
7. 隨機數函式
numpy.random 比 python內嵌的random 提供更多的函式,而且效率更高, 更適合產生陣列級別的樣本。
下面就是分別測試python自帶的和numpy的正太分佈產生隨機數所用的時間:
# 產生1000000個隨機數
In [9]: N = 1000000 In [12]: from random import normalvariate # numpy.random 中的隨機數函式 In [13]: %timeit np.random.normal(size = N) 10 loops, best of 3: 49.7 ms per loop # python 自帶的隨機數函式 In [14]: %timeit samples = [ normalvariate(0,1) for _ in xrange(N)] 1 loop, best of 3: 1.23 s per loop
numpy.random 中的函式
# numpy.random 中的隨機數函式