NumPy 學習(1): ndarrays


  Numpy 是Numerical Python的簡寫,用來進行高性能的科學計算以及數據分析的基礎包。它是一些高級工具(pandas)的基礎。它主要提供以下幾個功能:

  (1). ndarray:計算快,空間效率高的多緯的數組

  (2). 快速操作數組的標准數學函數

  (3). 向磁盤讀寫數據的工具,提供內存影射文件功能

  (3). 線性代數,隨機數生成器,傅立葉變換功能

  (4). 整合用C,C++,以及Fortran寫的代碼的工具 (Python生態系統宗重要的功能)

   事實上Numpy本身沒有提供太多數據分析的函數,但是理解NumPy的數組,以及面向數組的計算對后期學習pandas等工具有很大的幫助。

1. ndarray , 多維數組對象

  多維數組對象是NumPy的一個重要特點,它為龐大的數據集提供一個運算快且靈活的容器。

  (1). 簡單創建一個數組,通過調用pandas.array(),前提是需要引入numpy包,這里我門為了方便調用,將其重命名為np

In [6]: import numpy as np

In [7]: a = [6,7.5,8,0,1]
# 用創建的list對象來創建array對象
In [8]: arr1 = np.array(a)

In [9]: arr1
Out[9]: array([ 6. ,  7.5,  8. ,  0. ,  1. ])

  (2). 用嵌套序列來創建數組

n [12]: data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]

In [13]: arr2 = np.array(data2)

In [14]: arr2
Out[14]: 
array([[1, 2, 3, 4],
       [5, 6, 7, 8]])

  (3). 除了用np.array 來創建數組外,還有一些其他的函數來創建新的數組。

    zeros 和 ones 函數可以分別用來創建0,和1 元素的數組。 

In [15]: np.zeros(10)
Out[15]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
In [16]: np.ones((3,5))
Out[16]:
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])

     通過np.empty 創建一個由任意數初始化的數組

In [21]: np.empty((2,3,2))
Out[21]: 
array([[[  6.91210571e-310,   1.97791711e-316],
        [  0.00000000e+000,   0.00000000e+000],
        [  0.00000000e+000,   0.00000000e+000]],

       [[  0.00000000e+000,   0.00000000e+000],
        [  0.00000000e+000,   0.00000000e+000],
        [  0.00000000e+000,   0.00000000e+000]]])

    通過arrange函數創建:

    

In [28]: np.arange(10)
Out[28]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

 

  (4). 查看數組屬性

# 查看數組維度
In [24]: arr2.ndim Out[24]: 2 # 查看數組大尺寸 In [25]: arr2.shape Out[25]: (2, 4) # 查看數組元素類型 In [26]: arr2.dtype Out[26]: dtype('int64')
。。。。。

 

2. ndarrays 的數據類型:

   在創建數組的時候可以指定數據元素的類型,用dtype指定類型,說明在解析數組所在內存空間的時候采用什么方式。這使得NumPy 更加強大和易用。

 在大多數情況下,NumPy是直接類型映射成底層的二進制,這使得其更容易以二進制流的方式去讀寫數據。

    

In [3]: arr1 = np.array([1,2,3,4],dtype = np.float64)

In [4]: arr2 = np.array([4,3,2,1],dtype = np.int32)

In [5]: arr1.dtype
Out[5]: dtype('float64')

In [6]: arr2.dtype
Out[6]: dtype('int32')

  數據類型表:

  

  

  可以顯示的將一種類型強轉為另一種類型,這時需要使用astye函數

In [7]: arr2.dtype
Out[7]: dtype('int32')
In [8]: float_arr2 = arr2.astype(np.float64)
In [9]: float_arr2
Out[9]: array([ 4.,  3.,  2.,  1.])
In [10]: float_arr2.dtype
Out[10]: dtype('float64')

  但是當把浮點類型轉化為整形的時候會出現截斷:

  

In [11]: arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])

In [12]: arr.astype(np.int32)
Out[12]: array([ 3, -1, -2,  0, 12, 10], dtype=int32)

  也可以把字符串表示的數字轉換為數值類型,但是可能在轉換過程中出錯,因為有的字符串無法轉換為數值類型。

In [13]: numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)

In [14]: numeric_strings.astype(float)
Out[14]: array([  1.25,  -9.6 ,  42.  ])


3. 運算

  可以在NumPy的數組之間,以及數組和數字之間作運算。

In [15]: arr = np.array([[1., 2., 3.], [4., 5., 6.]])

In [16]: arr
Out[16]: 
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])
# 數組間乘法
In [17]: arr * arr
Out[17]: 
array([[  1.,   4.,   9.],
       [ 16.,  25.,  36.]])
# 數組間減法
In [18]: arr - arr
Out[18]: 
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
# 數和數組的除法
In [19]: 1 / arr
Out[19]: 
array([[ 1.        ,  0.5       ,  0.33333333],
       [ 0.25      ,  0.2       ,  0.16666667]])
# 數和數組的乘法
In [20]: arr * 0.5
Out[20]: 
array([[ 0.5,  1. ,  1.5],
       [ 2. ,  2.5,  3. ]])

  不同尺寸大小的數組間也是可以運算的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 


免責聲明!

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



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