1. 程式人生 > >NumPy學習(讓資料處理變簡單)

NumPy學習(讓資料處理變簡單)

 

NumPy學習(一)

 

NumPy陣列建立

NumPy陣列屬性

NumPy數學算術與算數運算

 

 

NumPy陣列建立

NumPy 中定義的最重要的物件是稱為 ndarray 的 N 維陣列型別。 它描述相同型別的元素集合。 可以使用基於零的索引訪問集合中的專案。
ndarray中的每個元素在記憶體中使用相同大小的塊。 ndarray中的每個元素是資料型別物件的物件(稱為 dtype)。
從ndarray物件提取的任何元素(通過切片)由一個數組標量型別的 Python 物件表示。 

  

它從任何暴露陣列介面的物件,或從返回陣列的任何方法建立一個ndarray。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

 

序號	引數及描述
1.	object 任何暴露陣列介面方法的物件都會返回一個數組或任何(巢狀)序列。
2.	dtype 陣列的所需資料型別,可選。
3.	copy 可選,預設為true,物件是否被複制。
4.	order C(按行)、F(按列)或A(任意,預設)。
5.	subok 預設情況下,返回的陣列被強制為基類陣列。 如果為true,則返回子類。
6.	ndimin 指定返回陣列的最小維數。

 

 

dtype用來設定元素的資料型別

NumPy 支援比 Python 更多種類的數值型別。 下表顯示了 NumPy 中定義的不同標量資料型別。
序號	資料型別及描述
1.	bool_儲存為一個位元組的布林值(真或假)
2.	int_預設整數,相當於 C 的long,通常為int32或int64
3.	intc相當於 C 的int,通常為int32或int64
4.	intp用於索引的整數,相當於 C 的size_t,通常為int32或int64
5.	int8位元組(-128 ~ 127)
6.	int1616 位整數(-32768 ~ 32767)
7.	int3232 位整數(-2147483648 ~ 2147483647)
8.	int6464 位整數(-9223372036854775808 ~ 9223372036854775807)
9.	uint88 位無符號整數(0 ~ 255)
10.	uint1616 位無符號整數(0 ~ 65535)
11.	uint3232 位無符號整數(0 ~ 4294967295)
12.	uint6464 位無符號整數(0 ~ 18446744073709551615)
13.	float_float64的簡寫
14.	float16半精度浮點:符號位,5 位指數,10 位尾數
15.	float32單精度浮點:符號位,8 位指數,23 位尾數
16.	float64雙精度浮點:符號位,11 位指數,52 位尾數
17.	complex_complex128的簡寫
18.	complex64複數,由兩個 32 位浮點表示(實部和虛部)
19.	complex128複數,由兩個 64 位浮點表示(實部和虛部)

  

 

最簡單的建立方式

import numpy as np

#將列表轉為numpy的陣列 array=np.array([[1,2,3],[4,5,6]])
print(array)

 

執行結果:
[[1 2 3]
[4 5 6]]

  

1.

建立特殊陣列

返回特定大小,以 0 填充的新陣列。

numpy.zeros(shape, dtype = float, order = 'C')

import numpy as np
#定義一個三行四列全為零的矩陣
c=np.zeros((3,4))
print(c)

 

運算結果:

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

  

 

2.

返回特定大小,以 1 填充的新陣列。

numpy.ones(shape, dtype = None, order = 'C')

 
import numpy as np
#定義一個3行2列全為1的矩陣 d=np.ones((3,2))
print(d)

 

 

執行結果:

[[1. 1.]
 [1. 1.]
 [1. 1.]]

 

 

3.

它建立指定形狀和dtype的未初始化陣列。 它使用以下建構函式:

numpy.empty(shape, dtype = float, order = 'C')

構造器接受下列引數:
序號	引數及描述
1.	Shape 空陣列的形狀,整數或整數元組
2.	Dtype 所需的輸出陣列型別,可選
3.	Order 'C'為按行的 C 風格陣列,'F'為按列的 Fortran 風格陣列

  

import numpy as np
#生成一個空矩陣,還不懂這裡的空到底指什麼。。。 e=np.empty((3,1))
print(e)

 

執行結果:

[[1.443e-321]
 [0.000e+000]
 [0.000e+000]]

 

 

4.

此函式類似於arange()函式。 在此函式中,指定了範圍之間的均勻間隔數量,而不是步長。 此函式的用法如下。

numpy.linspace(start, stop, num, endpoint, retstep, dtype)

import numpy as np
#將一段連續長大小為分幾份 f=np.linspace(1,10,5) #這裡的意思就是
print(f)

 

執行結果:

[ 1.    3.25  5.5   7.75 10.  ]

  

 

5.

這個函式返回ndarray物件,包含給定範圍內的等間隔值。

numpy.arange(start, stop, step, dtype)

import numpy as np
返回等間隔數字的陣列 array2=np.arange(6) #一個引數,預設從零開始;兩個引數,從第一個引數開始,到第二個引數,不包括第二個引數;三個引數,最後一個為間隔的大
小,預設為1
print(array2)

 

執行結果:

[0 1 2 3 4 5]

  

 

6.

import numpy as np
f=np.random.random((2,4)) #生成兩行四列的陣列,每個元素大於0小於1
print(f)

 

執行結果:

[[0.92670103 0.92050586 0.67470818 0.61072068]
 [0.52409562 0.562209   0.08881487 0.06907785]]

 

 

 

 

NumPy陣列屬性及方法

 

ndarray.shape

這一陣列屬性返回一個包含陣列維度的元組,它也可以用於調整陣列大小。

ndarray.ndim

這一陣列屬性返回陣列的維數。

numpy.itemsize

這一陣列屬性返回陣列中每個元素的位元組單位長度。

numpy.size

這一 陣列屬性返回陣列中所有元素的個數

 

numpy.flags

ndarray物件擁有以下屬性。這個函式返回了它們的當前值。

序號	屬性及描述
1.	C_CONTIGUOUS (C) 陣列位於單一的、C 風格的連續區段內
2.	F_CONTIGUOUS (F) 陣列位於單一的、Fortran 風格的連續區段內
3.	OWNDATA (O) 陣列的記憶體從其它物件處借用
4.	WRITEABLE (W) 資料區域可寫入。 將它設定為flase會鎖定資料,使其只讀
5.	ALIGNED (A) 資料和任何元素會為硬體適當對齊
6.	UPDATEIFCOPY (U) 這個陣列是另一陣列的副本。當這個陣列釋放時,源陣列會由這個陣列中的元素更

  

 

程式示例:

import numpy as np

#將列表轉為numpy的陣列
array=np.array([[1,2,3],[4,5,6]])
print(array.ndim) #輸出陣列維度
#shape屬性預設輸出行列,也可以設定陣列的行列 print(array.shape) #輸出行列
#第一種設定行列的方法 array.shape =(3,2) print(array) #第二種設定行列的方法 array=array.reshape(2,3) #注意一定要重新賦值 print(array)

print(array.itemsize) #每個元素的位元組長度單位,可以通過dtype引數設定
print(array.size) #所有元素的個數
print(array.flags) #展示當前的標誌

 

 

執行結果

2
[[1 2]
 [3 4]
 [5 6]]
[[1 2 3]
 [4 5 6]]
4
6
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : False
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

  

 

 

 

NumPy算數函式與算數運算

NumPy 包含大量的各種數學運算功能。 NumPy 提供標準的三角函式,算術運算的函式,複數處理函式等。

 

三角函式

NumPy 擁有標準的三角函式,它為弧度制單位的給定角度返回三角函式比值。

 

程式示例

import numpy as np
a = np.array([0,30,45,60,90])  
print  '不同角度的正弦值:'  
# 通過乘 pi/180 轉化為弧度  
print np.sin(a*np.pi/180)  
print  '\n'  
print  '陣列中角度的餘弦值:'  
print np.cos(a*np.pi/180)  
print  '\n'  
print  '陣列中角度的正切值:'  
print np.tan(a*np.pi/180)

 

 

執行結果

不同角度的正弦值:                                                   
[ 0.          0.5         0.70710678  0.8660254   1.        ]                 

陣列中角度的餘弦值:                                         
[  1.00000000e+00   8.66025404e-01   7.07106781e-01   5.00000000e-01          
   6.12323400e-17]                                                            

陣列中角度的正切值:                                            
[  0.00000000e+00   5.77350269e-01   1.00000000e+00   1.73205081e+00          
   1.63312394e+16]

 

 

反三角函式

arcsinarccos,和arctan函式返回給定角度的sincostan的反三角函式。 這些函式的結果可以通過numpy.degrees()函式通過將弧度制轉換為角度制來驗證。

 

程式示例

import numpy as np
a = np.array([0,30,45,60,90])  
print ('含有正弦值的陣列:')
sin = np.sin(a*np.pi/180)  
print(sin)
print('計算角度的反正弦,返回值以弧度為單位:')
inv = np.arcsin(sin)  
print(inv)
print ('通過轉化為角度制來檢查結果:')
print(np.degrees(inv))

 

執行結果

含有正弦值的陣列:
[0.         0.5        0.70710678 0.8660254  1.        ]
計算角度的反正弦,返回值以弧度為單位:
[0.         0.52359878 0.78539816 1.04719755 1.57079633]
通過轉化為角度制來檢查結果:
[ 0. 30. 45. 60. 90.]

 

 

 

舍入函式

numpy.around()

這個函式返回四捨五入到所需精度的值。 
該函式接受以下引數。numpy.around(a,decimals)

 

序號	引數及描述
1.	a 輸入陣列
2.	decimals 要舍入的小數位數。 預設值為0。 如果為負,整數將四捨五入到小數點左側的位置

  

 

程式示例

import numpy as np
a = np.array([1.0,5.55,  123,  0.567,  25.532])  
print('原陣列:')
print(a) 
print('舍入後:') 
print(np.around(a)) 
print np.around((a, decimals =  1))
print np.around((a, decimals =  -1))

 

 

執行結果

原陣列:                                                          
[   1.       5.55   123.       0.567   25.532]

舍入後:                                                         
[   1.    6.   123.    1.   26. ]                                               
[   1.    5.6  123.    0.6  25.5]                                          
[   0.    10.  120.    0.   30. ]

  

 

 

numpy.floor()

此函式返回不大於輸入引數的最大整數。 即標量x 的下限是最大的整數i ,使得i <= x。 注意在Python中,向下取整總是從 0 舍入。
說這麼多,就是向下取整,比如一個數:-1.7,向下取整為-2,向上取整為-1

import numpy as np
a = np.array([-1.7,  1.5,  -0.2,  0.6,  10])  
print('提供的陣列:')
print(a)
print('修改後的陣列:')
print(np.floor(a))

 

提供的陣列:
[-1.7 1.5 -0.2 0.6 10. ]
修改後的陣列:
[-2. 1. -1. 0. 10.]

 

numpy.ceil()

ceil()函式返回輸入值的上限,即,標量x的上限是最小的整數i ,使得i> = x

就是向上取整。

 

 

 

 

算數運算

 

程式示例

import  numpy as np


#一維陣列的簡單計算
a= np.array([10,23,44,30])
b=np.arange(4)
print(a)
print(b)

#相同位置相加
c=a+b
print(c)

#乘法
c=a*b
print(c)

#b**2
c=b**2
print(c)

print(a<2)
print(a==2)

 

 

執行結果

[10 23 44 30]
[0 1 2 3]
[10 24 46 33]
[ 0 23 88 90]
[0 1 4 9]
[False False False False]
[False False False False]

  

 

程式示例



import numpy as np
array1=np.array([[1,4],[4,8]]) array2=np.arange(4).reshape(2,2) #這裡依然對應位置相乘 d=array1*array2 print(d) #矩陣的乘法 d=np.dot(array1,array2) print(d) d=array1.dot(array2) print(d) #1為行,0為列 f=np.random.random((2,4)) print(f) print(np.sum(f)) print(np.min(f)) print(np.max(f)) print(np.sum(f,axis=1)) print(np.min(f,axis=0)) print(np.max(f,axis=1))

  

 

 

執行結果

[[ 0  4]
 [ 8 24]]
[[ 8 13]
 [16 28]]
[[ 8 13]
 [16 28]]
[[0.81949136 0.53538773 0.98840439 0.80249925]
 [0.65929239 0.69338047 0.00943806 0.56616625]]
5.0740598977352835
0.009438059212795835
0.9884043925380781
[3.14578273 1.92827717]
[0.65929239 0.53538773 0.00943806 0.56616625]
[0.98840439 0.69338047]

  

 

 

用於執行算術運算(如add(),subtract(),multiply()和divide())的輸入陣列必須具有相同的形狀或符合陣列廣播規則。

程式示例

import numpy as np
a = np.arange(9, dtype = np.float_).reshape(3,3)
print('第一個陣列:' )
print (a )

print ('第二個陣列:' )
b = np.array([10,10,10])
print(b )
print('兩個陣列相加:')
print(np.add(a,b) )

print ('兩個陣列相減:' )
print(np.subtract(a,b) )

print ('兩個陣列相乘:' )
print(np.multiply(a,b) )

print ('兩個陣列相除:' )
print(np.divide(a,b))

 

 

執行結果

第一個陣列:
[[ 0. 1. 2.]
 [ 3. 4. 5.]
 [ 6. 7. 8.]]

第二個陣列:
[10 10 10]

兩個陣列相加:
[[ 10. 11. 12.]
 [ 13. 14. 15.]
 [ 16. 17. 18.]]

兩個陣列相減:
[[-10. -9. -8.]
 [ -7. -6. -5.]
 [ -4. -3. -2.]]

兩個陣列相乘:
[[ 0. 10. 20.]
 [ 30. 40. 50.]
 [ 60. 70. 80.]]

兩個陣列相除:
[[ 0. 0.1 0.2]
 [ 0.3 0.4 0.5]
 [ 0.6 0.7 0.8]]