科學計算工具-numpy

簡介

Numpy:提供了一個在Python中做科學計算的基礎(chǔ)庫浙芙,重在數(shù)值計算,主要用于多維數(shù)組(矩陣)處理的庫。
用來存儲和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多嗓蘑。
本身是由C語言開發(fā),是個很基礎(chǔ)的擴展匿乃,Python其余的科學計算擴展大部分都是以此為基礎(chǔ)。
高性能科學計算和數(shù)據(jù)分析的基礎(chǔ)包
ndarray豌汇,多維數(shù)組(矩陣)幢炸,具有矢量運算能力,快速拒贱、節(jié)省空間
矩陣運算宛徊,無需循環(huán),可完成類似Matlab中的矢量運算
線性代數(shù)逻澳、隨機數(shù)生成

#導入
import numpy as np

數(shù)組創(chuàng)建

NumPy數(shù)組是一個多維的數(shù)組對象(矩陣)闸天,稱為ndarray,具有矢量算術(shù)運算能力斜做,并具有執(zhí)行速度快和節(jié)省空間的特點苞氮。

注意:ndarray的下標從0開始,且數(shù)組里的所有元素必須是相同類型

ndarray屬性

  • ndim屬性:維度個數(shù)
  • shape屬性:維度大小
  • dtype屬性:數(shù)據(jù)類型

ndarray的隨機創(chuàng)建

通過隨機抽樣(numpy.random)生成隨機數(shù)據(jù)

np.random.rand()
隨機樣本位于[0,1)中瓤逼,rand固定取件0.0~1.0

1-1

np.random.randn()
隨機樣本是從標準正態(tài)分布中返回一個或多個樣本值

1-2

np.random.randint()
生成指定維度大辛鳌(3行4列)的隨機多維整型數(shù)據(jù)(二維),randint()可以指定區(qū)間(-1, 5)

1-3

np.random.uniform()
生成指定維度大邪云臁(3行4列)的隨機多維浮點型數(shù)據(jù)(二維)贷帮,uniform()可以指定區(qū)間(-1, 5)

1-4

ndarray的序列創(chuàng)建

np.array(collection)
collection為序列型對象(list)、嵌套序列對象(list of list)

#list序列轉(zhuǎn)換為ndarray
list = range(10)
arr = np.array(list)
print(arr)#ndarray數(shù)據(jù)
print(type(arr))
2-1

np.zeros()指定大小的全0數(shù)組诱告。注意第一個參數(shù)是數(shù)組撵枢,用來指定大小,如(3,4)

zeros_arr = np.zeros((3,4))
2-2

np.ones()
指定大小全是1的數(shù)組精居,注意:第一個參數(shù)是遠足锄禽,用來指定大小,如(3,4)

np.ones()
2-3

np.empty()
初始化數(shù)組靴姿,不是總是返回全0沟绪,有時返回的是未初始化的隨機值(內(nèi)存里的隨機值)

#np.empty
empty_arr = np.empty((3,3))
#np.empty 指定數(shù)據(jù)類型
empty_int_arr = np.empty((3,3),int)
2-4

np.arange()和reshape()
arange()類似python的range(),創(chuàng)建一個一維ndarray數(shù)組
reshape將重新調(diào)整數(shù)組的維數(shù)

# np.arange() 
arr = np.arange(15) # 15個元素的 一維數(shù)組 
print(arr) 
print(arr.reshape(3, 5)) # 3x5個元素的 二維數(shù)組
print(arr.reshape(1, 3, 5)) # 1x3x5個元素的 三維數(shù)組

2-5

ndarray數(shù)據(jù)類型

dtype參數(shù)
指定數(shù)組的數(shù)據(jù)類型,類型名+位數(shù)空猜,如float64绽慈,int32

#初始化3行4列數(shù)組恨旱,數(shù)據(jù)類型為float64
zeros_float_arr = np.zeros((3,4),dtype=np.float64)
print(zeros_float_arr)
3-1

astype方法

#astype轉(zhuǎn)換數(shù)據(jù)類型,將已有的數(shù)組的數(shù)據(jù)類型轉(zhuǎn)換為int32
zeros_int_arr = zeros_float_arr.astype(np.int32) 
print(zeros_int_arr) 
print(zeros_int_arr.dtype)


3-2

ndarray的矩陣運算

數(shù)組是編程中的概念坝疼,矩陣搜贤、矢量是數(shù)學概念。

在計算機編程中钝凶,矩陣可以用數(shù)組形式定義仪芒,矢量可以用結(jié)構(gòu)定義!

1.矢量運算:相同大小的數(shù)組間運算應(yīng)用在元素上

#矢量與矢量運算
arr = np.array([[1,2,3],[4,5,6]])
print("元素相乘:")
print(arr*arr)
print("矩陣相加:")
print(arr + arr)
4-1

2.矢量和標量運算:"廣播"-將標量"廣播"到各個元素

#矢量與標量運算
arr = np.array([[1,2,3],[4,5,6]])
print(1./arr)
print(2.*arr)
4-2

ndarray的索引與切片

1.一維數(shù)組的索引與切片-與python的列表索引功能相似

#一維數(shù)組
arr1 = np.arange(10)
print(arr1)
print(arr1[2:5])
5-1

2.多維數(shù)組的索引與切片

arr2 = np.random.randint(1,5,size(3,5))
print(arr2)
print(arr2[2:3])
5-2

3.條件索引
布爾值多維數(shù)組:arr[condition],condition也可以是多個條件組合耕陷。
注意闲孤,多個條件組合要使用 & | 連接,而不是Python的 and or崖叫。

# 條件索引 找出 data_arr 中 2005年后的數(shù)據(jù) 
data_arr = np.random.rand(3,3) 
print(data_arr) 
year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]]) 
is_year_after_2005 = year_arr >= 2005 
print(is_year_after_2005, is_year_after_2005.dtype)

5-3
filtered_arr = data_arr[is_year_after_2005] 
print(filtered_arr) 
# 多個條件 
filtered_arr = data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)] 
print(filtered_arr)

5-4

ndarray的轉(zhuǎn)置

二維數(shù)組直接使用轉(zhuǎn)換函數(shù):transpose()
高維數(shù)組轉(zhuǎn)換要指定維度編號參數(shù) (0, 1, 2, …)巍耗,注意參數(shù)是元組

arr = np.random.rand(2,3) # 2x3 數(shù)組 
print(arr) 
print(arr.transpose()) # 轉(zhuǎn)換為 3x2 數(shù)組 
5-5
arr3d = np.random.rand(2,3,4) # 2x3x4 數(shù)組,2對應(yīng)0嗜诀,3對應(yīng)1猾警,4對應(yīng)2 
print(arr3d) 
print(arr3d.transpose((1,0,2))) # 根據(jù)維度編號,轉(zhuǎn)為為 3x2x4 數(shù)組
5-6

元素計算函數(shù)

  • ceil(): 向上最接近的整數(shù)隆敢,參數(shù)是 number 或 array
  • floor(): 向下最接近的整數(shù)发皿,參數(shù)是 number 或 array
  • rint(): 四舍五入,參數(shù)是 number 或 array
  • isnan(): 判斷元素是否為 NaN(Not a Number)拂蝎,參數(shù)是 number 或 array
  • multiply(): 元素相乘穴墅,參數(shù)是 number 或 array
  • divide(): 元素相除,參數(shù)是 number 或 array
  • abs():元素的絕對值温自,參數(shù)是 number 或 array
  • where(condition, x, y): 三元運算符封救,x if condition else y
# randn() 返回具有標準正態(tài)分布的序列。 
arr = np.random.randn(2,3) 
print(arr) 
print(np.ceil(arr)) 
print(np.floor(arr)) 
print(np.rint(arr)) 

6-1
print(np.isnan(arr)) 
print(np.multiply(arr, arr)) 
print(np.divide(arr, arr)) 
print(np.where(arr > 0, 1, -1))
6-2

元素統(tǒng)計函數(shù)

  • np.mean(), np.sum():所有元素的平均值捣作,所有元素的和誉结,參數(shù)是 number 或 array
  • np.max(), np.min():所有元素的最大值,所有元素的最小值券躁,參數(shù)是 number 或 array
  • np.std(), np.var():所有元素的標準差惩坑,所有元素的方差,參數(shù)是 number 或 array
  • np.argmax(), np.argmin():最大值的下標索引值也拜,最小值的下標索引值以舒,參數(shù)是 number 或 array
  • np.cumsum(), np.cumprod():返回一個一維數(shù)組,每個元素都是之前所有元素的 累加和 和 累乘積慢哈,參數(shù)是 number 或 array
  • 多維數(shù)組默認統(tǒng)計全部維度蔓钟,axis參數(shù)可以按指定軸心統(tǒng)計,值為0則按列統(tǒng)計卵贱,值為1則按行統(tǒng)計滥沫。
arr = np.arange(12).reshape(3,4) 
print(arr) 
print(np.sum(arr)) # 所有元素的和 
print(np.sum(arr, axis=0)) # 數(shù)組的按列統(tǒng)計和 
print(np.sum(arr, axis=1)) # 數(shù)組的按行統(tǒng)計和
print(np.cumsum(arr)) # 返回一個一維數(shù)組侣集,每個元素都是之前所有元素的 累加和 
7-1
arr = np.random.randint(0,10,(3,4))
print(arr)
#所有元素的平均值與和
print(np.mean(arr))
print(np.sum(arr))
#求數(shù)組的最大值
print(np.max(arr))
print(np.min(arr))
#方差和標準差:衡量數(shù)據(jù)和期望值之間的偏離值
#求方差:所有元素都和平均數(shù)的差的平方的平均數(shù)
print(np.var(arr))
#求標準差:方差的平方根
print(np.std(arr))

7-2
#求最大值和最小值的索引下標
#如果是多維數(shù)組,將多維數(shù)組合并成一維數(shù)組兰绣,再找出最大值索引下標
arr = np.arange(10)
print(arr)
print(np.argmax(arr))
print(np.argmin(arr))
#返回一維數(shù)組世分,數(shù)組每個元素都是之前每個元素的累加和
print(np.cumsum(arr))
#返回一個一維數(shù)組,數(shù)組的每一個元素都是之前所有元素的累加積
print(np.cumprod(arr))
7-3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缀辩,一起剝皮案震驚了整個濱河市臭埋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臀玄,老刑警劉巖瓢阴,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異健无,居然都是意外死亡荣恐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門睬涧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旗唁,你說我怎么就攤上這事畦浓。” “怎么了检疫?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵讶请,是天一觀的道長。 經(jīng)常有香客問我屎媳,道長夺溢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任烛谊,我火速辦了婚禮风响,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丹禀。我一直安慰自己状勤,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布双泪。 她就那樣靜靜地躺著持搜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪焙矛。 梳的紋絲不亂的頭發(fā)上葫盼,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音村斟,去河邊找鬼贫导。 笑死抛猫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的脱盲。 我是一名探鬼主播邑滨,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钱反!你這毒婦竟也來了掖看?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤面哥,失蹤者是張志新(化名)和其女友劉穎哎壳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尚卫,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡归榕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吱涉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刹泄。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怎爵,靈堂內(nèi)的尸體忽然破棺而出特石,到底是詐尸還是另有隱情,我是刑警寧澤鳖链,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布姆蘸,位于F島的核電站,受9級特大地震影響芙委,放射性物質(zhì)發(fā)生泄漏逞敷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一灌侣、第九天 我趴在偏房一處隱蔽的房頂上張望推捐。 院中可真熱鬧,春花似錦侧啼、人聲如沸玖姑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽焰络。三九已至,卻和暖如春符喝,著一層夾襖步出監(jiān)牢的瞬間闪彼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畏腕,地道東北人缴川。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像描馅,于是被迫代替她去往敵國和親把夸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容