前言:
今天我們介紹兩個(gè)科學(xué)運(yùn)算當(dāng)中最為重要的兩個(gè)模塊,一個(gè)是 numpy,一個(gè)是 pandas创葡。任何關(guān)于數(shù)據(jù)分析的模塊都少不了它們兩個(gè)。為什么使用 numpy and pandas
運(yùn)算速度快:numpy 和 pandas 都是采用 C 語(yǔ)言編寫, pandas 又是基于 numpy, 是 numpy 的升級(jí)版本。
消耗資源少:采用的是矩陣運(yùn)算改备,會(huì)比 python 自帶的字典或者列表快好多
Numpy屬性
ndim:維度
shape:行數(shù)和列數(shù)
size:元素個(gè)數(shù)
屏幕快照 2018-11-05 下午3.13.52.png
創(chuàng)建ndarray
array:創(chuàng)建數(shù)組
dtype:指定數(shù)據(jù)類型
zeros:創(chuàng)建數(shù)據(jù)全為0
ones:創(chuàng)建數(shù)據(jù)全為1
empty:創(chuàng)建數(shù)據(jù)接近0
arrange:按指定范圍創(chuàng)建數(shù)據(jù)
linspace:創(chuàng)建線段屏幕快照 2018-11-05 下午4.01.47.png屏幕快照 2018-11-05 下午4.02.13.png屏幕快照 2018-11-05 下午4.15.48.png
注意:
numpy默認(rèn)ndarray的所有元素的類型是相同的
如果傳進(jìn)來的列表中包含不同的類型,則統(tǒng)一為同一類型蔓倍,優(yōu)先級(jí):str>float>int
Numpy的基本操作
1.索引:
(一維與列表完全一致 多維時(shí)同理)悬钳,根據(jù)索引修改數(shù)據(jù)、查看數(shù)據(jù)2.切片:
一維與列表完全一致 多維時(shí)同理屏幕快照 2018-11-05 下午4.23.00.png屏幕快照 2018-11-05 下午4.24.38.png
3.變形
使用arr.reshape()函數(shù)偶翅,注意參數(shù)是一個(gè)tuple
例:將一維數(shù)組變形成多維數(shù)組===arr.reshape((2,5))
例:將多維數(shù)組變形成一維數(shù)組===arr2 = arr1.reshape((15,))
例:arr2.reshape((-1,3)) ===其中-1表示的是根據(jù)列自動(dòng)計(jì)算出行
實(shí)際應(yīng)用:
圖片翻轉(zhuǎn):圖片本質(zhì)上是三維的array默勾,先將三維變形為一維,再通過切片翻轉(zhuǎn)聚谁,然后在講一維array變形為三維就實(shí)現(xiàn)了圖片的翻轉(zhuǎn)母剥。4.級(jí)聯(lián)
使用np.concatenate((a1, a2, ...), axis=0)函數(shù)
級(jí)聯(lián)需要注意的點(diǎn):
--- 1.級(jí)聯(lián)的參數(shù)是列表:一定要加中括號(hào)或小括號(hào)
--- 2.維度必須相同
--- 3.形狀相符:在維度保持一致的前提下,如果進(jìn)行橫向(axis=1)級(jí)聯(lián)形导,必須保證進(jìn)行級(jí)聯(lián)的數(shù)組行數(shù)保持一致环疼。如果進(jìn)行縱向(axis=0)級(jí)聯(lián),必須保證進(jìn)行級(jí)聯(lián)的數(shù)組列數(shù)保持一致朵耕。
--- 4.可通過axis參數(shù)改變級(jí)聯(lián)的方向屏幕快照 2018-11-05 下午4.42.39.png
5.切分
與級(jí)聯(lián)類似秦爆,三個(gè)函數(shù)完成切分工作:
-- np.split(arr,[行,列]憔披,軸):參數(shù)2是一個(gè)列表類型
-- np.vsplit
-- np.hsplit
例:np.split(arr,[2,4],axis=0)
應(yīng)用:照片剪切
ndarray的聚合操作
求和np.sum()
最大最小值:np.max()/ np.min()
平均值:np.mean()
廣播機(jī)制(重要)
ndarray廣播機(jī)制的三條規(guī)則:缺失維度的數(shù)組將維度補(bǔ)充為進(jìn)行運(yùn)算的數(shù)組的維度等限。缺失的數(shù)組元素使用已有元素進(jìn)行補(bǔ)充。
規(guī)則一:為缺失的維度補(bǔ)1(進(jìn)行運(yùn)算的兩個(gè)數(shù)組之間的維度只能相差一個(gè)維度)
規(guī)則二:缺失元素用已有值填充
規(guī)則三:缺失維度的數(shù)組只能有一行或者一列例一例二例三
ndarray的排序
快速排序
np.sort()與ndarray.sort()都可以芬膝,但有區(qū)別:
np.sort()不改變輸入(原ndarray順序不變)
ndarray.sort()本地處理望门,不占用空間,但改變輸入(順序改變锰霜,被覆蓋)
部分排序(不常用)
np.partition(a,k) 有的時(shí)候我們不是對(duì)全部數(shù)據(jù)感興趣筹误,我們可能只對(duì)最小或最大的一部分感興趣。
當(dāng)k為正時(shí)癣缅,我們想要得到最小的k個(gè)數(shù)
當(dāng)k為負(fù)時(shí)厨剪,我們想要得到最大的k個(gè)數(shù)