NumPy 學習(3): 通用函數


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 中的隨機數函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM