資料處理三劍客之Numpy

2021-10-05 16:11:21 字數 3993 閱讀 9548

ndarray和list列表的區別:

python list 列表儲存的是物件的指標,比如 [0,1,2] 需要儲存 3 個指標和 3 個整數的物件,浪費記憶體資源和cpu計算時間

numpy中的ndarray是一種儲存單一資料型別的多維陣列結構,儲存在乙個連續的記憶體塊中,節約了計算資源。

numpy:

-numpy(numerical python):python語言的乙個擴充套件程式庫,支援大量的維度資料與矩陣運算,針對陣列提供大量的數學函式庫。

-numpy是基於c語言開發,所以這使得numpy的執行速度很快,高效率執行就是numpy的一大優勢。

建立陣列:

t1 = np.array([0,1,2,3])

t2 = np.array(range(4))

t3 = np.arange(4)

#np.arange([start,] stop[,step,], dtype=none)

#dtype為資料型別

#改變資料型別

t4 = np.array(range(4), dtype=『float32』)

#numpy中的小數

t5 = np.array([random,random() for i in range(4)])

#保留兩位小數

t6 = np.round(t5, 2)

numpy中的軸(axis)

可以理解為方向,用0,1,2…表示

np.reshape(2,3,4)

其中2為0軸,3為1軸,4為2軸

numpy讀取資料:

np.loadtxt(frame, dtype=np.float, delimiter=none.skiprows=0, unpack=false)

name: 檔案的名稱, 可以是檔名, 也可以是ugz或者bz2的壓縮檔案;

dtype: 資料型別,可選,預設是float;

delimiter: 分隔符字串,預設情況是任何的空格,

skiprows: 跳過前xx行, 一般情況跳過第一行;

usecols: 讀取指定的列,索引,可以是元組;

unpack: 如果為true,對返回的陣列物件轉置;

使輸出不為科學計數法

np.set_printoptions(suppress=true)

陣列的轉置

t1.transpose()

t1.t

t1.swapaxes(1,0) #將0軸和1軸轉置

numpy中的索引和切片:

#取行t1[2]

#取連續的多行

t1[2:]

#取不連續的多行

t1[[1,3,5]]

#取列t1[:,0]

#取連續的多列

t1[:,2:]

#取不連讀的多列

t1[:,[0,2]]

#取第3行到第5行,第2列到第4列

t1[2:5,1:4]

#取多個不相鄰的點

t1[[0,2,2],[0,1,3]]

得到(0,0),(2,1),(2,3)

numpy中三元運算子、布林索引、裁剪

1、np.where(t1<3,10,20)

#t1中小於3的變為10,大於3的變為20

2、t[t>10]=10

3、t1.clip(10,18)

#t1中小於10變為10,大於18變為18

t1[3,3] = 2

把位置3,3值變2

陣列的拼接

np.vstack((t1,t2)):豎直拼接

np.hstack((t1,t2)):水平拼接

行變換t[[2,1],:] = t[[1,2]:]

列變換t[:,[2,1]] =t[:,[1,2]]

numpy的一些好用方法:

1.獲取最大值最小值的位置

-np.argmax(t,axis=0)

-np.agmin(t,axis=0)

2.建立乙個全0的陣列:np.zeros((3,4))

3.建立乙個全1的陣列:np.ones((3,4))

4.建立乙個對角線為1的正方形陣列(方陣):np.eye(3)

numpy生成隨機數

1、numpy.random.rand(d0, d1, …, dn)

-產生乙個給定形狀的陣列(其實應該是ndarray物件或者是乙個單值),陣列中的值服從[0, 1)之間的均勻分布。

2、numpy.random.randn(d0, d1, …, dn)

-返回乙個指定形狀的陣列,陣列中的值服從標準正態分佈(均值為0,方差為1)

3、numpy.random.randint(low, high, [shape])

-從給定上下限範圍選取隨機數整數,範圍是low,high,shape指定形狀

4、numpy.random.uniform(low, high, size)

-返回乙個在區間[low, high)中均勻分布的陣列,size指定形狀。

5、numpy.random.normal(loc, scale, size)

-從指定正態分佈中隨機抽取樣本,分布中心是loc(概率分布的均值),標準差是scale,形狀是size

6、np.random.seed(s)

-隨機數種子,s是給定的種子值,因為計算機生成的是偽隨機數,所以通過設定相同的隨機數種子,可以每次生成相同的隨機數

numpy的copy和view

1、a=b 完全不複製,a和b相互影響

2、a=b[:],檢視的操作,一種切片,會建立新的物件a,但是a的資料完全由b保管,他們兩個的資料變化是一致的

3、a=b.copy(),複製,a和b互不影響

1,2屬於淺拷貝

3屬於深拷貝

深拷貝和淺拷貝最根本的區別在於是否真正獲取乙個物件的複製實體,而不是引用

淺拷貝(shallowcopy)只是增加了乙個指標指向已存在的記憶體位址,

深拷貝(deepcopy)是增加了乙個指標並且申請了乙個新的記憶體,使這個增加的指標指向這個新的記憶體,

numpy中的nan和inf

nan:not a number

1、nan不等於nan

2、使用np.count_nonzero(t!=t)可得到nan的個數

3、使用np.isnan(t)可以判斷是否nan

4、nan和任何值計算都為nan

np.sum(t,axis=0) 計算每一列的和

np.sum(t,axis=1) 計算每一行的和

處理nan的值:把缺失的數值替換成均值(中值)或者直接刪除有缺失的一行

inf: inf表示正無窮,-inf表示負無窮

np中的常用統計方法:

求和:t.sum(axis=none)

均值:t.mean(a,axis=none) 受離群點影響較大

中值:np.median(t,axis=none)

最大值:t.max(axis=none)

最小值:t.min(axis=none)

極值:np.ptp(t,axis=none) 計算陣列中最大值與最小值之差

標準差:t.std(axis=none)

陣列的形狀:

reshape

不改變資料的條件下修改形狀

flatten

返回乙份陣列拷貝,對拷貝所做的修改不會影響原始陣列

陣列的計算:

陣列直接對乙個數進行加減乘除,產生的結果是陣列中的每個元素都會加減乘除這個數。

形狀一致的陣列對應位置計算

形狀不一致的陣列(不符合廣播原則)無法計算

numpy的廣播原則:如果兩個陣列的後緣維度(從末尾開始算起的維度)的軸長度相符或其中一方的長度為1,則認為它們是廣播相容的。廣播會在缺失維度和(或)軸長度為1的維度上進行。

廣播主要發生在兩種情況,一種是兩個陣列的維數不相等,但是它們的後緣維度的軸長相符,另外一種是有一方的長度為1。

例如(3,3,2)和(3,2)是可以運算的,因為對於二維陣列(3,2)也可以表示為(1,3,2),同理:(4,2,5,4)和(2,1,4)也是可以進行運算的。

機器學習入門三劍客之numpy

import numpy as np 建立簡單的列表 a 1,2,3,4 將列表轉換為陣列 b np.array b b.sizeb.shapeb.ndimb.dtypearray one np.ones 10,10 array zero np.zeros 10,10 正態分佈 給定均值 標準差 維...

檔案處理三劍客之grep

grep global search regular expression and print out the line 作用 文字搜尋工具,根據使用者指定的 模式 對目標文字逐行進行匹配檢查 列印匹配到的行 模式 由正規表示式字元及文字字元所編寫的過濾條件 格式grep options patte...

三劍客之HTML,CSS,JS

檔案 夾 名 1 整個 放在乙個命名為 學號姓名 1 資料夾中 2 檔案要分類管理,所有素材和網頁分類存放在相應資料夾 例如 img web 中 3 主頁名index.htm,檔案及資料夾名字不能用中文 4 網頁個數至少2個 5 整個 大小在25mb以下 6 網頁中不用的word txt等素材要求刪...