用列表和集合表示
數組與列表的關係
列表:數據類型能夠不一樣
數組:數據類型能夠相同html
用列表表示python
用字典表示
高維數據僅利用最基本的二元關係展現數據之間的複雜結構。數組
ndarray
Python已有列表類型,爲何須要一個數組對象(類型)?
看一下下面兩個例子就知道了。app
def pySum(): a = [1,2,3,4] b = [4,5,6,7] c = [] for i in range(len(a)): c.append(a[i]**2 + b[i]**2) return c print(pySum())
import numpy as np def npSum(): a = np.array([1,2,3,4]) b = np.array([4,5,6,7]) c = a**2 + b**2 return c print(npSum())
從上面兩個例子能夠看出,Python自帶的list至關於標量化操做,而ndarray至關於向量化操做。函數
屬性 | 說明 |
---|---|
.ndim | 秩,即軸的數量或維度的數量 |
.shape | ndarray對象的尺度,對於矩陣,n行m列 |
.size | ndarray對象元素的個數,至關於.shape中n*m的值 |
.dtype | ndarray對象的元素類型 |
.itemsize | ndarray對象中每一個元素的大小,以字節爲單位 |
下面體會一下實際用法:ui
>>> import numpy as np >>> a = np.array([[1,2,3],[4,5,6]]) >>> a.ndim 2 >>> a.shape (2, 3) >>> a.size 6 >>> a.dtype dtype('int32') >>> a.itemsize 4
數據類型 | 說明 |
---|---|
bool | 布爾類型,True或False |
intc | 與C語言中的int類型一致,通常是int32或int64 |
intp | 用於索引的整數,與C語言中ssize_t一致,int32或int64 |
int8 | 字節長度的整數,取值:[‐128, 127] |
int16 | 16位長度的整數,取值:[‐32768, 32767] |
int32 | 32位長度的整數,取值:[‐2^31, 2^31‐1] |
int64 | 64位長度的整數,取值:[‐2^63, 2^63‐1] |
uint8 | 8位無符號整數,取值:[0, 255] |
uint16 | 16位無符號整數,取值:[0, 65535] |
uint32 | 32位無符號整數,取值:[0, 232‐1] |
uint64 | 32位無符號整數,取值:[0, 264‐1] |
float16 | 16位半精度浮點數:1位符號位,5位指數,10位尾數 |
float32 | 32位半精度浮點數:1位符號位,8位指數,23位尾數 |
float64 | 64位半精度浮點數:1位符號位,11位指數,52位尾數 |
complex64 | 複數類型,實部和虛部都是32位浮點數 |
complex128 | 複數類型,實部和虛部都是64位浮點數 |
用法:spa
x = np.array(list/tuple) x = np.array(list/tuple, dtype=np.float32)
當np.array()不指定dtype時,NumPy將根據數據狀況關聯一個dtype類型
實例:code
>>> x = np.array([1,2,3]) >>> x array([1, 2, 3]) >>> print(x) [1 2 3] >>> y = np.array([4,5,6]) >>> print(y) [4 5 6] >>> z = np.array([[1,2],[3,4],(5,6)]) >>> print(z) [[1 2] [3 4] [5 6]]
函數 | 說明 |
---|---|
np.arange(n) | 相似range()函數,返回ndarray類型,元素從0到n‐1 |
np.ones(shape) | 根據shape生成一個全1數組,shape是元組類型 |
np.zeros(shape) | 根據shape生成一個全0數組,shape是元組類型 |
np.full(shape,val) | 根據shape生成一個數組,每一個元素值都是val |
np.eye(n) | 建立一個正方的n*n單位矩陣,對角線爲1,其他爲0 |
實例:htm
>>> np.arange(10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.ones((3,4)) array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]]) >>> np.zeros((3,4),dtype=np.int32) array([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]) >>> np.eye(5) array([[ 1., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 1.]]) >>> x = np.ones((2,3,4)) >>> print(x) [[[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]] [[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]]] >>> x.shape (2, 3, 4)
函數 | 說明 |
---|---|
np.ones_like(a) | 根據數組a的形狀生成一個全1數組 |
np.zeros_like(a) | 根據數組a的形狀生成一個全0數組 |
np.full_like(a,val) | 根據數組a的形狀生成一個數組,每一個元素值都是val |
函數 | 說明 |
---|---|
np.linspace() | 根據起止數據等間距地填充數據,造成數組 |
np.concatenate() | 將兩個或多個數組合併成一個新的數組 |
>>> a = np.linspace(1,10,4) >>> a array([ 1., 4., 7., 10.]) >>> b = np.linspace(1,10,4,endpoint=False) >>> b array([ 1. , 3.25, 5.5 , 7.75]) >>> c = np.concatenate((a,b)) >>> c array([ 1. , 4. , 7. , 10. , 1. , 3.25, 5.5 , 7.75])
方法 | 說明 |
---|---|
.reshape(shape) | 不改變數組元素,返回一個shape形狀的數組,原數組不變 |
.resize(shape) | 與.reshape()功能一致,但修改原數組 |
.swapaxes(ax1,ax2) | 將數組n個維度中兩個維度進行調換 |
.flatten() | 對組進行數降維,返回摺疊後的一維數組,原數組不變 |
>>> a = np.ones((2,3,4), dtype=np.int32) >>> a.reshape((3,8)) 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]]) >>> a 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]]]) >>> a.resize((3,8)) >>> a 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]])
>>> a = np.ones((2,3,4), dtype=np.int32) >>> a.flatten() 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]) >>> a 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]]]) >>> b = a.flatten() >>> b 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])
>>> a = np.ones((2,3,4), dtype=np.int32) >>> a.astype(np.float) 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.]]]) >>> a 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]]])
>>> a = np.full((2,3,4),25,dtype=np.int) >>> a array([[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]) >>> a.tolist() [[[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]], [[25, 25, 25, 25], [25, 25, 25, 25], [25, 25, 25, 25]]]
索引:獲取數組中特定位置元素的過程
切片:獲取數組元素子集的過程
一維數組的索引和切片:與Python的列表相似
多維數組的切片也相似對象
數組與標量之間的運算做用於數組的每個元素
函數 | 說明 |
---|---|
np.abs(x) np.fabs(x) | 計算數組各元素的絕對值 |
np.sqrt(x) | 計算數組各元素的平方根 |
np.square(x) | 計算數組各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 計算數組各元素的天然對數、10底對數和2底對數 |
np.ceil(x) np.floor(x) | 計算數組各元素的ceiling值或floor值 |
np.rint(x) | 計算數組各元素的四捨五入值 |
np.modf(x) | 將數組各元素的小數和整數部分以兩個獨立數組形式返回 |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) | 計算數組各元素的普通型和雙曲型三角函數 |
np.exp(x) | 計算數組各元素的指數值 |
np.sign(x) | 計算數組各元素的符號值,1(+), 0, ‐1(‐) |
>>> a = np.arange(24).reshape((2,3,4)) >>> np.square(a) array([[[ 0, 1, 4, 9], [ 16, 25, 36, 49], [ 64, 81, 100, 121]], [[144, 169, 196, 225], [256, 289, 324, 361], [400, 441, 484, 529]]], dtype=int32) >>> a = np.sqrt(a) >>> a array([[[ 0. , 1. , 1.41421356, 1.73205081], [ 2. , 2.23606798, 2.44948974, 2.64575131], [ 2.82842712, 3. , 3.16227766, 3.31662479]], [[ 3.46410162, 3.60555128, 3.74165739, 3.87298335], [ 4. , 4.12310563, 4.24264069, 4.35889894], [ 4.47213595, 4.58257569, 4.69041576, 4.79583152]]]) >>> np.modf(a) (array([[[ 0. , 0. , 0.41421356, 0.73205081], [ 0. , 0.23606798, 0.44948974, 0.64575131], [ 0.82842712, 0. , 0.16227766, 0.31662479]], [[ 0.46410162, 0.60555128, 0.74165739, 0.87298335], [ 0. , 0.12310563, 0.24264069, 0.35889894], [ 0.47213595, 0.58257569, 0.69041576, 0.79583152]]]), array([[[ 0., 1., 1., 1.], [ 2., 2., 2., 2.], [ 2., 3., 3., 3.]], [[ 3., 3., 3., 3.], [ 4., 4., 4., 4.], [ 4., 4., 4., 4.]]]))
函數 | 說明 |
---|---|
+ ‐ * / ** | 兩個數組各元素進行對應運算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素級的最大值/最小值計算 |
np.mod(x,y) | 元素級的模運算 |
np.copysign(x,y) | 將數組y中各元素值的符號賦值給數組x對應元素 |
> < >= <= == != | 算術比較,產生布爾型數組 |
參考