Python 是一種高級的,動態的,多泛型的編程語言。Python代碼很多時候看起來就像是偽代碼一樣,因此你可以使用很少的幾行可讀性很高的代碼來實現一個非常強大的想法。
一.基礎:
Numpy的主要數據類型是ndarray,即多維數組。它有以下幾個屬性:
ndarray.ndim:數組的維數
ndarray.shape:數組每一維的大小
ndarray.size:數組中全部元素的數量
ndarray.dtype:數組中元素的類型(numpy.int32, numpy.int16, and numpy.float64等)
ndarray.itemsize:每個元素占幾個字節
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
>>> import numpy as np >>> a = np.arange( 15 ).reshape( 3 , 5 ) >>> a array([[ 0 , 1 , 2 , 3 , 4 ], [ 5 , 6 , 7 , 8 , 9 ], [ 10 , 11 , 12 , 13 , 14 ]]) >>> a.shape ( 3 , 5 ) >>> a.ndim 2 >>> a.dtype.name 'int64' >>> a.itemsize 8 >>> a.size 15 >>> type (a) < type 'numpy.ndarray' > >>> b = np.array([ 6 , 7 , 8 ]) >>> b array([ 6 , 7 , 8 ]) >>> type (b) < type 'numpy.ndarray' > |
二.創建數組:
使用array函數講tuple和list轉為array:
1
2
3
4
5
6
7
8
9
|
>>> import numpy as np >>> a = np.array([ 2 , 3 , 4 ]) >>> a array([ 2 , 3 , 4 ]) >>> a.dtype dtype( 'int64' ) >>> b = np.array([ 1.2 , 3.5 , 5.1 ]) >>> b.dtype dtype( 'float64' ) |
多維數組:
1
2
3
4
|
>>> b = np.array([( 1.5 , 2 , 3 ), ( 4 , 5 , 6 )]) >>> b array([[ 1.5 , 2. , 3. ], [ 4. , 5. , 6. ]]) |
生成數組的同時指定類型:
1
2
3
4
|
>>> c = np.array( [ [ 1 , 2 ], [ 3 , 4 ] ], dtype = complex ) >>> c array([[ 1. + 0.j , 2. + 0.j ], [ 3. + 0.j , 4. + 0.j ]]) |
生成數組并賦為特殊值:
ones:全1
zeros:全0
empty:隨機數,取決于內存情況
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> np.zeros( ( 3 , 4 ) ) array([[ 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. ], [ 0. , 0. , 0. , 0. ]]) >>> np.ones( ( 2 , 3 , 4 ), dtype = np.int16 ) # dtype can also be specified array([[[ 1 , 1 , 1 , 1 ], [ 1 , 1 , 1 , 1 ], [ 1 , 1 , 1 , 1 ]], [[ 1 , 1 , 1 , 1 ], [ 1 , 1 , 1 , 1 ], [ 1 , 1 , 1 , 1 ]]], dtype = int16) >>> np.empty( ( 2 , 3 ) ) # uninitialized, output may vary array([[ 3.73603959e - 262 , 6.02658058e - 154 , 6.55490914e - 260 ], [ 5.30498948e - 313 , 3.14673309e - 307 , 1.00000000e + 000 ]]) |
生成均勻分布的array:
arange(最小值,最大值,步長)(左閉右開)
linspace(最小值,最大值,元素數量)
1
2
3
4
5
6
7
|
>>> np.arange( 10 , 30 , 5 ) array([ 10 , 15 , 20 , 25 ]) >>> np.arange( 0 , 2 , 0.3 ) # it accepts float arguments array([ 0. , 0.3 , 0.6 , 0.9 , 1.2 , 1.5 , 1.8 ]) >>> np.linspace( 0 , 2 , 9 ) # 9 numbers from 0 to 2 array([ 0. , 0.25 , 0.5 , 0.75 , 1. , 1.25 , 1.5 , 1.75 , 2. ]) >>> x = np.linspace( 0 , 2 * pi, 100 ) # useful to evaluate function at lots of points |
三.基本運算:
整個array按順序參與運算:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> a = np.array( [ 20 , 30 , 40 , 50 ] ) >>> b = np.arange( 4 ) >>> b array([ 0 , 1 , 2 , 3 ]) >>> c = a - b >>> c array([ 20 , 29 , 38 , 47 ]) >>> b * * 2 array([ 0 , 1 , 4 , 9 ]) >>> 10 * np.sin(a) array([ 9.12945251 , - 9.88031624 , 7.4511316 , - 2.62374854 ]) >>> a< 35 array([ True , True , False , False ], dtype = bool ) |
兩個二維使用*符號仍然是按位置一對一相乘,如果想表示矩陣乘法,使用dot:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> A = np.array( [[ 1 , 1 ], ... [ 0 , 1 ]] ) >>> B = np.array( [[ 2 , 0 ], ... [ 3 , 4 ]] ) >>> A * B # elementwise product array([[ 2 , 0 ], [ 0 , 4 ]]) >>> A.dot(B) # matrix product array([[ 5 , 4 ], [ 3 , 4 ]]) >>> np.dot(A, B) # another matrix product array([[ 5 , 4 ], [ 3 , 4 ]]) |
內置函數(min,max,sum),同時可以使用axis指定對哪一維進行操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
>>> b = np.arange( 12 ).reshape( 3 , 4 ) >>> b array([[ 0 , 1 , 2 , 3 ], [ 4 , 5 , 6 , 7 ], [ 8 , 9 , 10 , 11 ]]) >>> >>> b. sum (axis = 0 ) # sum of each column array([ 12 , 15 , 18 , 21 ]) >>> >>> b. min (axis = 1 ) # min of each row array([ 0 , 4 , 8 ]) >>> >>> b.cumsum(axis = 1 ) # cumulative sum along each row array([[ 0 , 1 , 3 , 6 ], [ 4 , 9 , 15 , 22 ], [ 8 , 17 , 27 , 38 ]]) |
Numpy同時提供很多全局函數
1
2
3
4
5
6
7
8
9
10
|
>>> B = np.arange( 3 ) >>> B array([ 0 , 1 , 2 ]) >>> np.exp(B) array([ 1. , 2.71828183 , 7.3890561 ]) >>> np.sqrt(B) array([ 0. , 1. , 1.41421356 ]) >>> C = np.array([ 2. , - 1. , 4. ]) >>> np.add(B, C) array([ 2. , 0. , 6. ]) |
四.尋址,索引和遍歷:
一維數組的遍歷語法和python list類似:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
>>> a = np.arange( 10 ) * * 3 >>> a array([ 0 , 1 , 8 , 27 , 64 , 125 , 216 , 343 , 512 , 729 ]) >>> a[ 2 ] 8 >>> a[ 2 : 5 ] array([ 8 , 27 , 64 ]) >>> a[: 6 : 2 ] = - 1000 # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000 >>> a array([ - 1000 , 1 , - 1000 , 27 , - 1000 , 125 , 216 , 343 , 512 , 729 ]) >>> a[ : : - 1 ] # reversed a array([ 729 , 512 , 343 , 216 , 125 , - 1000 , 27 , - 1000 , 1 , - 1000 ]) >>> for i in a: ... print (i * * ( 1 / 3. )) ... nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0 |
多維數組的訪問通過給每一維指定一個索引,順序是先高維再低維:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
>>> def f(x,y): ... return 10 * x + y ... >>> b = np.fromfunction(f,( 5 , 4 ),dtype = int ) >>> b array([[ 0 , 1 , 2 , 3 ], [ 10 , 11 , 12 , 13 ], [ 20 , 21 , 22 , 23 ], [ 30 , 31 , 32 , 33 ], [ 40 , 41 , 42 , 43 ]]) >>> b[ 2 , 3 ] 23 >>> b[ 0 : 5 , 1 ] # each row in the second column of b array([ 1 , 11 , 21 , 31 , 41 ]) >>> b[ : , 1 ] # equivalent to the previous example array([ 1 , 11 , 21 , 31 , 41 ]) >>> b[ 1 : 3 , : ] # each column in the second and third row of b array([[ 10 , 11 , 12 , 13 ], [ 20 , 21 , 22 , 23 ]]) When fewer indices are provided than the number of axes, the missing indices are considered complete slices: >>> >>> b[ - 1 ] # the last row. Equivalent to b[-1,:] array([ 40 , 41 , 42 , 43 ]) |
…符號表示將所有未指定索引的維度均賦為 : ,:在python中表示該維所有元素:
1
2
3
4
5
6
7
8
9
10
11
12
|
>>> c = np.array( [[[ 0 , 1 , 2 ], # a 3D array (two stacked 2D arrays) ... [ 10 , 12 , 13 ]], ... [[ 100 , 101 , 102 ], ... [ 110 , 112 , 113 ]]]) >>> c.shape ( 2 , 2 , 3 ) >>> c[ 1 ,...] # same as c[1,:,:] or c[1] array([[ 100 , 101 , 102 ], [ 110 , 112 , 113 ]]) >>> c[..., 2 ] # same as c[:,:,2] array([[ 2 , 13 ], [ 102 , 113 ]]) |
遍歷:
如果只想遍歷整個array可以直接使用:
1
2
3
4
5
6
7
8
|
>>> for row in b: ... print (row) ... [ 0 1 2 3 ] [ 10 11 12 13 ] [ 20 21 22 23 ] [ 30 31 32 33 ] [ 40 41 42 43 ] |
但是如果要對每個元素進行操作,就要使用flat屬性,這是一個遍歷整個數組的迭代器
1
2
3
|
>>> for element in b.flat: ... print (element) ... |
總結
以上所述是小編給大家介紹的Python Numpy 數組的初始化和基本操作,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/Baoli1008/article/details/50531684