NumPy(Numerical Python)是一個(gè)開源的 Python 科學(xué)計(jì)算擴(kuò)展庫(kù),主要用來處理任意維度數(shù)組與矩陣,通常對(duì)于相同的計(jì)算任務(wù),使用 NumPy 要比直接使用 Python 基本數(shù)據(jù)結(jié)構(gòu)要簡(jiǎn)單、高效的多。安裝使用 pip install numpy
命令即可。
ndarray 即 n 維數(shù)數(shù)組類型,它是一個(gè)相同數(shù)據(jù)類型的集合,以 0 下標(biāo)為開始進(jìn)行集合中元素的索引。
創(chuàng)建數(shù)組可以使用 NumPy 的 array 方法,具體格式如下:
array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)
p_object:數(shù)組或嵌套的數(shù)列
dtype:數(shù)組元素的數(shù)據(jù)類型
copy:是否需要復(fù)制
order:創(chuàng)建數(shù)組的樣式,C 為行方向,F(xiàn) 為列方向,A 為任意方向(默認(rèn))
subok:默認(rèn)返回一個(gè)與基類類型一致的數(shù)組
ndmin:生成數(shù)組的最小維度
當(dāng)然,還可以使用 arange 方法,下面看一下具體使用示例。
創(chuàng)建數(shù)組
看一下如何創(chuàng)建一維數(shù)組
import numpy as nparr1 = np.array([1, 2, 3, 4, 5])arr2 = np.array(range(1, 6))arr3 = np.arange(1, 6)print (arr1)print (arr2)print (arr3)
看一下如何創(chuàng)建多維數(shù)組,以二維數(shù)組為例
import numpy as nparr = np.array([[1, 2], [3, 4], [5, 6]])print(arr)
常用屬性
通過示例來看一下 ndarray 對(duì)象的常用屬性
import numpy as nparr = np.array([1, 2, 3])# 元素類型print(arr.dtype)# 形狀print(arr.shape)# 元素個(gè)數(shù)print(arr.size)# 維度print(arr.ndim)# 每個(gè)元素大?。ㄗ止?jié))print(arr.itemsize)
改變數(shù)組的形狀
import numpy as nparr = np.arange(30)print(arr)# 變成二維數(shù)組arr.shape = (5, 6)print(arr)# 變成三維數(shù)組arr = arr.reshape((2, 3, 5))print(arr)
通過下表來看一下 NumPy 的常用數(shù)據(jù)類型。
類型 | 描述 |
---|---|
int_ | 默認(rèn)的整數(shù)類型(類似于 C 語言中的 long,int32 或 int64) |
intc | 與 C 的 int 類型一樣,一般是 int32 或 int 64 |
intp | 用于索引的整數(shù)類型(類似于 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
int8 | 字節(jié)(-128 to 127) |
int16 | 整數(shù)(-32768 to 32767) |
int32 | 整數(shù)(-2147483648 to 2147483647) |
int64 | 整數(shù)(-9223372036854775808 to 9223372036854775807) |
uint8 | 無符號(hào)整數(shù)(0 to 255) |
uint16 | 無符號(hào)整數(shù)(0 to 65535) |
uint32 | 無符號(hào)整數(shù)(0 to 4294967295) |
uint64 | 無符號(hào)整數(shù)(0 to 18446744073709551615) |
bool_ | 布爾型數(shù)據(jù)類型(True 或者 False) |
float_ | float64 類型的簡(jiǎn)寫 |
float16 | 半精度浮點(diǎn)數(shù),包括:1 個(gè)符號(hào)位,5 個(gè)指數(shù)位,10 個(gè)尾數(shù)位 |
float32 | 單精度浮點(diǎn)數(shù),包括:1 個(gè)符號(hào)位,8 個(gè)指數(shù)位,23 個(gè)尾數(shù)位 |
float64 | 雙精度浮點(diǎn)數(shù),包括:1 個(gè)符號(hào)位,11 個(gè)指數(shù)位,52 個(gè)尾數(shù)位 |
complex_ | complex128 類型的簡(jiǎn)寫,即 128 位復(fù)數(shù) |
complex64 | 復(fù)數(shù),表示雙 32 位浮點(diǎn)數(shù)(實(shí)數(shù)部分和虛數(shù)部分) |
complex128 | 復(fù)數(shù),表示雙 64 位浮點(diǎn)數(shù)(實(shí)數(shù)部分和虛數(shù)部分) |
通過示例來看一下如何修改數(shù)據(jù)類型。
import numpy as nparr1 = np.array([1, 2, 3])arr2 = np.array([1.111, 2.222, 3.333])# 當(dāng)前數(shù)據(jù)類型print(arr1.dtype)# 修改數(shù)據(jù)類型arr1 = arr1.astype(np.int64)print(arr1.dtype)# 保留一位小數(shù)arr2 = np.round(arr2, 1)print(arr2)
NumPy 數(shù)組支持索引、切片操作,還可以進(jìn)行迭代,先看一下一維數(shù)組。
import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])print(arr[3])# 修改元素值arr[3] = 10print(arr[3])print(arr[2:])print(arr[2:4])print(arr[4:])for i in arr: print(i)
再看一下多維數(shù)組的這些操作。
import numpy as nparr = np.arange(12).reshape(3, 4)print(arr)# 取某一個(gè)值print(arr[2, 3])# 取多個(gè)不連續(xù)的值print(arr[[0, 2],[1, 3]])# 取一行print(arr[0])# 連續(xù)取多行print(arr[1:])# 取不連續(xù)的多行print(arr[[0, 2]])# 取一列print(arr[:, 0])# 連續(xù)取多列print(arr[:, 2:])# 取不連續(xù)的多列print(arr[:, [0, 2]])
視圖(淺復(fù)制)只是原有數(shù)據(jù)的一個(gè)引用,通過該引用可訪問、操作原有數(shù)據(jù),如果我們對(duì)視圖進(jìn)行修改,它會(huì)影響原始數(shù)據(jù),因?yàn)闇\復(fù)制共享內(nèi)存。
副本(深復(fù)制)是對(duì)數(shù)據(jù)的完整拷貝,如果我們對(duì)副本進(jìn)行修改,它不會(huì)影響到原始數(shù)據(jù),因?yàn)樯顝?fù)制不共享內(nèi)存。
調(diào)用 ndarray 的 view() 方法會(huì)產(chǎn)生一個(gè)視圖,下面通過示例來看一下。
import numpy as npa = np.arange(6).reshape(2,3)# 創(chuàng)建視圖b = a.view()print('a的id:', id(a))print('b的id:', id(b))# 修改 b 的形狀b.shape = 3,2print('a的形狀:')print(a)print('b的形狀:')print(b)print(a is b)
調(diào)用 ndarray 的 copy() 方法會(huì)產(chǎn)生一個(gè)副本,下面通過示例來看一下。
import numpy as npa = np.arange(1, 6)# 創(chuàng)建副本b = a.copy()print(a is b)b[1] = 10print(a[1])print(b[1])
NumPy 中的軸簡(jiǎn)單來說就是方向的意思,使用數(shù)字 0、1、2 表示,一維數(shù)組只有 0 軸,二維數(shù)組有 0、1 軸,三維數(shù)組有 0、1、2 軸,了解軸的相應(yīng)概念可以方便我們進(jìn)行相應(yīng)計(jì)算。
數(shù)組與數(shù)字之間運(yùn)算
看一下數(shù)組與數(shù)字之間的加、減、乘、除運(yùn)算。
import numpy as nparr = np.arange(12).reshape(3, 4)print(arr + 3)print(arr - 1)print(arr * 2)print(arr / 3)
數(shù)組與數(shù)組之間運(yùn)算
看一下數(shù)組與數(shù)組之間的運(yùn)算。
import numpy as np# 相同行數(shù),相同列數(shù)a = np.arange(12).reshape(3, 4)b = np.arange(20, 32).reshape(3, 4)print(a + b)print(b * a)# 相同行數(shù)c = np.arange(12).reshape(3, 4)d = np.arange(3).reshape(3, 1)print(c + d)print(c - d)# 相同列數(shù)e = np.arange(12).reshape(4, 3)f = np.arange(3).reshape(1, 3)print(e * f)print(e - f)
常用數(shù)學(xué)運(yùn)算
import numpy as nparr = np.array([[33, 55], [11, 66], [22, 99]])print(arr)# 最大值print(np.max(arr))# 最小值print(np.min(arr))# 某一軸上的最大值print(np.max(arr, 1))# 某一軸上的最小值print(np.min(arr, 1))# 平均值print(np.mean(arr))# 某一行、一列的平均值print(np.mean(arr, axis=1))# 最大值索引print(np.argmax(arr))print(np.argmax(arr, axis=1))# 最小值索引print(np.argmin(arr))print(np.argmin(arr, axis=1))# 極差print(np.ptp(arr))print(np.ptp(arr, axis=1))# 方差print(np.var(arr))# 標(biāo)準(zhǔn)差print(np.std(arr))# 中位數(shù)print(np.median(arr))
添加操作
NumPy 的 append() 方法可以在數(shù)組的末尾添加值,該操作會(huì)分配至整個(gè)數(shù)組,并把原數(shù)組復(fù)制到新數(shù)組,該操作需保證輸入的維度匹配,下面看一下使用示例。
import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])# 添加元素print(np.append(arr, [1, 1, 3]))# 沿 0 軸添加元素print(np.append(arr, [[1, 1, 3]], axis=0))# 沿 1 軸添加元素print(np.append(arr, [[1, 1, 3], [2, 1, 5]], axis=1))
我們還可以使用 insert() 方法進(jìn)行添加操作,該方法在給定索引前沿給定軸向數(shù)組中插入值,下面看一下使用示例。
import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])# 添加元素print(np.insert(arr, 1, [1, 1, 3]))# 沿 0 軸添加元素print(np.insert(arr, 1, [1, 1, 3], axis=0))# 沿 1 軸添加元素print(np.insert(arr, 1, [1, 5], axis=1))
刪除操作
NumPy 的 delete() 可以對(duì)數(shù)組進(jìn)行刪除操作,下面看一下使用示例。
import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])# 刪除元素print(np.delete(arr, 1))# 沿 0 軸刪除元素print(np.delete(arr, 1, axis=0))# 沿 1 軸刪除元素print(np.delete(arr, 1, axis=1))
去重操作
NumPy 的 unique() 方法可以去除數(shù)組中的重復(fù)元素。
import numpy as nparr = np.array([1, 3, 5, 2, 4, 6, 1, 5, 3])# 去除重復(fù)元素print(np.unique(arr))# 去重?cái)?shù)組的索引數(shù)組u, indices = np.unique(arr, return_index=True)print(indices)# 去重元素的重復(fù)數(shù)量u, indices = np.unique(arr, return_counts=True)print(indices)
聯(lián)系客服