本篇內容主要講解“Numpy的基本用法整理”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Numpy的基本用法整理”吧!
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為鎮(zhèn)海等服務建站,鎮(zhèn)海等地企業(yè),進行企業(yè)商務咨詢服務。為鎮(zhèn)海企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
前言
Numpy是一個開源的Python科學計算庫,它是python科學計算庫的基礎庫,許多其他著名的科學計算庫如Pandas,Scikit-learn等都要用到Numpy庫的一些功能。
本文主要內容如下:
Numpy數(shù)組對象
創(chuàng)建ndarray數(shù)組
Numpy的數(shù)值類型
ndarray數(shù)組的屬性
ndarray數(shù)組的切片和索引
處理數(shù)組形狀
數(shù)組的類型轉換
numpy常用統(tǒng)計函數(shù)
數(shù)組的廣播
1 Numpy數(shù)組對象
Numpy中的多維數(shù)組稱為ndarray,這是Numpy中最常見的數(shù)組對象。ndarray對象通常包含兩個部分:
ndarray數(shù)據(jù)本身
描述數(shù)據(jù)的元數(shù)據(jù)
Numpy數(shù)組的優(yōu)勢
Numpy數(shù)組通常是由相同種類的元素組成的,即數(shù)組中的數(shù)據(jù)項的類型一致。這樣有一個好處,由于知道數(shù)組元素的類型相同,所以能快速確定存儲數(shù)據(jù)所需空間的大小。
Numpy數(shù)組能夠運用向量化運算來處理整個數(shù)組,速度較快;而Python的列表則通常需要借助循環(huán)語句遍歷列表,運行效率相對來說要差。
Numpy使用了優(yōu)化過的C API,運算速度較快
關于向量化和標量化運算,對比下面的參考例子就可以看出差異
使用python的list進行循環(huán)遍歷運算
1. def pySum():
2. a = list(range(10000))
3. b = list(range(10000))
4. c = []
5. for iin range(len(a)):
6. c.append(a[i]**2 + b[i]**2)
7.
8. return c
1. %timeit pySum()
1. 10 loops, best of3:49.4 ms per loop
使用numpy進行向量化運算
1. import numpyas np
2. def npSum():
3. a = np.arange(10000)
4. b = np.arange(10000)
5. c = a**2 + b**2
6. return c
1. %timeit npSum()
1. The slowest run took262.56 times longer than the fastest.This could mean that an intermediate resultis being cached.
2. 1000 loops, best of3:128 ?s per loop
從上面的運行結果可以看出,numpy的向量化運算的效率要遠遠高于python的循環(huán)遍歷運算(效率相差好幾百倍)。 (1ms=1000?s)
2創(chuàng)建ndarray數(shù)組
首先需要導入numpy庫,在導入numpy庫時通常使用“np”作為簡寫,這也是Numpy官方倡導的寫法。
當然,你也可以選擇其他簡寫的方式或者直接寫numpy,但還是建議用“np”,這樣你的程序能和大都數(shù)人的程序保持一致。
1. import numpyas np
創(chuàng)建ndarray數(shù)組的方式有很多種,這里介紹我使用的較多的幾種:
Method 1:基于list或tuple
1. #一維數(shù)組
2.
3. #基于list
4. arr1 = np.array([1,2,3,4])
5. print(arr1)
6.
7. #基于tuple
8. arr_tuple = np.array((1,2,3,4))
9. print(arr_tuple)
10.
11. #二維數(shù)組 (2*3)
12. arr2 = np.array([[1,2,4], [3,4,5]])
13. arr2
1. [1234]
2. [1234]
3. array([[1,2,4],
4. [3,4,5]])
請注意:
一維數(shù)組用print輸出的時候為 [1 2 3 4],跟python的列表是有些差異的,沒有“,”
在創(chuàng)建二維數(shù)組時,在每個子list外面還有一個"[]",形式為“[[list1], [list2]]”
Method 2:基于np.arange
1. #一維數(shù)組
2. arr1 = np.arange(5)
3. print(arr1)
4.
5. #二維數(shù)組
6. arr2 = np.array([np.arange(3), np.arange(3)])
7. arr2
1. [01234]
2. array([[0,1,2],
3. [0,1,2]])
Method 3:基于arange以及reshape創(chuàng)建多維數(shù)組
1. #創(chuàng)建三維數(shù)組
2. arr = np.arange(24).reshape(2,3,4)
3. arr
1. array([[[0, 1, 2, 3],
2. [4, 5, 6, 7],
3. [8, 9,10,11]],
4.
5. [[12,13,14,15],
6. [16,17,18,19],
7. [20,21,22,23]]])
請注意:arange的長度與ndarray的維度的乘積要相等,即 24 = 2X3X4
用numpy.random創(chuàng)建數(shù)組的方法,可以參考下面的文章
為什么你用不好Numpy的random函數(shù)?
其他創(chuàng)建ndarray的方法,各位小伙伴們自己可以研究下。
3 Numpy的數(shù)值類型
Numpy的數(shù)值類型如下:
每一種數(shù)據(jù)類型都有相應的數(shù)據(jù)轉換函數(shù),參考示例如下:
1. np.int8(12.334)
1. 12
1. np.float64(12)
1. 12.0
1. np.float(True)
1. 1.0
1. bool(1)
1. True
在創(chuàng)建ndarray數(shù)組時,可以指定數(shù)值類型:
1. a = np.arange(5, dtype=float)
2. a
1. array([0., 1., 2., 3., 4.])
請注意,復數(shù)不能轉換成為整數(shù)類型或者浮點數(shù),比如下面的代碼會運行出錯
1. # float(42 + 1j)
4 ndarray數(shù)組的屬性
dtype屬性,ndarray數(shù)組的數(shù)據(jù)類型,數(shù)據(jù)類型的種類,前面已描述。
1. np.arange(4, dtype=float)
1. array([0., 1., 2., 3.])
1. # 'D'表示復數(shù)類型
2. np.arange(4, dtype='D')
1. array([0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j])
1. np.array([1.22,3.45,6.779], dtype='int8')
1. array([1,3,6], dtype=int8)
ndim屬性,數(shù)組維度的數(shù)量
1. a = np.array([[1,2,3], [7,8,9]])
2. a.ndim
1. 2
shape屬性,數(shù)組對象的尺度,對于矩陣,即n行m列,shape是一個元組(tuple)
1. a.shape
1. (2,3)
size屬性用來保存元素的數(shù)量,相當于shape中nXm的值
1. a.size
1. 6
itemsize屬性返回數(shù)組中各個元素所占用的字節(jié)數(shù)大小。
1. a.itemsize
1. 4
nbytes屬性,如果想知道整個數(shù)組所需的字節(jié)數(shù)量,可以使用nbytes屬性。其值等于數(shù)組的size屬性值乘以itemsize屬性值。
1. a.nbytes
1. 24
1. a.size*a.itemsize
1. 24
T屬性,數(shù)組轉置
1. b = np.arange(24).reshape(4,6)
2. b
1. array([[0, 1, 2, 3, 4, 5],
2. [6, 7, 8, 9,10,11],
3. [12,13,14,15,16,17],
4. [18,19,20,21,22,23]])
1. b.T
1. array([[0, 6,12,18],
2. [1, 7,13,19],
3. [2, 8,14,20],
4. [3, 9,15,21],
5. [4,10,16,22],
6. [5,11,17,23]])
復數(shù)的實部和虛部屬性,real和imag屬性
1. d = np.array([1.2+2j,2+3j])
2. d
1. array([1.2+2.j, 2.0+3.j])
real屬性返回數(shù)組的實部
1. d.real
1. array([1.2, 2. ])
imag屬性返回數(shù)組的虛部
1. d.imag
1. array([2., 3.])
flat屬性,返回一個numpy.flatiter對象,即可迭代的對象。
1. e = np.arange(6).reshape(2,3)
2. e
1. array([[0,1,2],
2. [3,4,5]])
1. f = e.flat
2. f
1.
1. for itemin f:
2. print(item)
1. 0
2. 1
3. 2
4. 3
5. 4
6. 5
可通過位置進行索引,如下:
1. f[2]
1. 2
1. f[[1,4]]
1. array([1,4])
也可以進行賦值
1. e.flat=7
2. e
1. array([[7,7,7],
2. [7,7,7]])