NumPy科學(xué)計(jì)算庫(kù)

NumPy(Numerical Python)是Python的?種開(kāi)源的數(shù)值計(jì)算擴(kuò)展民效。提供多維數(shù)組對(duì)象区岗,各種派?對(duì)象(如掩碼數(shù)組和矩陣),這種?具可?來(lái)存儲(chǔ)和處理?型矩陣眠菇,?Python?身的嵌套列表(nestedlist structure)結(jié)構(gòu)要?效的多(該結(jié)構(gòu)也可以?來(lái)表示矩陣(matrix))边败,?持?量的維度數(shù)組與矩陣運(yùn)算,此外也針對(duì)數(shù)組運(yùn)算提供?量的數(shù)學(xué)函數(shù)庫(kù)琼锋,包括數(shù)學(xué)放闺、邏輯、形狀操作缕坎、排序、選擇篡悟、輸?輸出谜叹、離散傅?葉變換、基本線性代數(shù)搬葬,基本統(tǒng)計(jì)運(yùn)算和隨機(jī)模擬等等荷腊。

  • NumPy的功能強(qiáng)?
    1.強(qiáng)?的N維數(shù)組
    2.成熟的?播功能
    3.?于整合C/C++和Fortran代碼的?具包
    4.NumPy提供了全?的數(shù)學(xué)功能、隨機(jī)數(shù)?成器和線性代數(shù)功能
  • 安裝Python庫(kù)
    1.開(kāi)發(fā)工具(類似pycharm急凰,在瀏覽器里而已):pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
    2.pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 啟動(dòng)終端
    1.Windows----> 快捷鍵:win + R ----->輸?:cmd回?------>命令?出來(lái) Mac ---->啟動(dòng)終端
    2.啟動(dòng)jupyter
    3.進(jìn)?終端輸?指令:jupyter notebook
    4.在哪?啟動(dòng)jupyter女仰,瀏覽器上的?錄就對(duì)應(yīng)那?
    5.jupyter擴(kuò)展插件
    pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install jupyter_nbextensions_configurator -i https://pypi.tuna.tsinghua.edu.cn/simple
    jupyter contrib nbextension install --user
    jupyter nbextensions_configurator enable --user
    設(shè)置:
    a.重啟jupyter,菜單欄多了一個(gè)插件(Nbextensions),點(diǎn)擊進(jìn)入,去掉左上角的全選對(duì)勾
    b.多勾選:標(biāo)題(Table of Contents)疾忍、代碼提示(Hinterland)乔外、折疊代碼(Codefolding)、折疊標(biāo)題(Collapsible Headings)
    已勾選的不用動(dòng)了

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

import numpy as np
l = [1,3,5,7,9] # 列表
arr = np.array(l) # 將列表轉(zhuǎn)換為NumPy數(shù)組
arr # 數(shù)據(jù)?樣一罩,NumPy數(shù)組的?法杨幼,功能更加強(qiáng)?
# 輸出為
# array([1, 3, 5, 7, 9])

import numpy as np
arr1 = np.ones(10) # 輸出為:array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
arr2 = np.zeros(10) # 輸出為: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
arr3 = np.full(shape = [2,3],fill_value=2.718)
# 輸出為:
# array([[2.718, 2.718, 2.718],
# [2.718, 2.718, 2.718]])
arr4 = np.arange(start = 0,stop = 20,step = 2)
# 等差數(shù)列 輸出為:array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
arr5 = np.linspace(start =0,stop = 9,num = 10)
# 等差數(shù)列 輸出為:array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
arr6 = np.random.randint(0,100,size = 10)
# int隨機(jī)數(shù) 輸出為:array([ 4, 8, 79, 62, 34, 35, 2, 65, 47, 18])
arr7 = np.random.randn(5)
# 正態(tài)分布 輸出為:array([ 0.57807872, 0.37922855, 2.37936837, -0.28688769,
0.2882854 ])
arr8 = np.random.random(size = 5)
# float 隨機(jī)數(shù) 輸出為:array([0.59646412, 0.37960586, 0.38077327, 0.76983539,
0.22689201])  

數(shù)組的軸數(shù)、維度聂渊、尺寸形狀
import numpy as np
arr = np.random.randint(0,100,size = (3,4,5))
arr.ndim # 輸出 3
import numpy as np
arr = np.random.randint(0,100,size = (3,4,5))
arr.shape # 輸出 (3,4,5)
數(shù)組元素的總數(shù)
import numpy as np
arr = np.random.randint(0,100,size = (3,4,5))
arr.size # 輸出 3*4*5 = 60

索引差购、切?和迭代

arr = np.array([0,1,2,3,4,5,6,7,8,9])
arr[5] #索引 輸出 5
arr[5:8] #切?輸出:array([5, 6, 7])
arr[2::2] # 從索引2開(kāi)始每?jī)蓚€(gè)中取?個(gè) 輸出 array([2, 4, 6, 8])
arr[::3] # 不寫索引默認(rèn)從0開(kāi)始,每3個(gè)中取?個(gè) 輸出為 array([0, 3, 6, 9])
arr[1:7:2] # 從索引1開(kāi)始到索引7結(jié)束汉嗽,左閉右開(kāi)欲逃,每2個(gè)數(shù)中取?個(gè) 輸出 array([1, 3, 5])
arr[::-1] # 倒序 輸出 array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
arr[::-2] # 倒序 每?jī)蓚€(gè)取?個(gè) 輸出 array([9, 7, 5, 3, 1])
arr[5:8]=12 # 切?賦值會(huì)賦值到每個(gè)元素上,與列表操作不同
temp = arr[5:8]
temp[1] = 1024
arr # 輸出:array([ 0, 1, 2, 3, 4, 12, 1024, 12, 8, 9])

arr2d = np.array([[1, 3, 5], [2, 4, 6], [-2, -7, -9], [6, 6, 6]])  # ?維數(shù)組 shape(3,4)
arr2d[0, -1]  # 索引 等于arr2d[0][-1] 輸出 5
arr2d[0, 2]  # 索引 等于arr2d[0][2] == arr2d[0][-1] 輸出 5
arr2d[:2, -2:]  # 切? 第?維和第?維都進(jìn)?切? 等于arr2d[:2][:,1:]
arr2d[:2, 1:]  # 切? 1 == -2 ?個(gè)是正序饼暑,另個(gè)?是倒序暖夭,對(duì)應(yīng)相同的位置
# 輸出:
# array([[3, 5],
# [4, 6]])

花式索引
import numpy as np

# ?維
arr1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
arr2 = arr1[[1, 3, 3, 5, 7, 7, 7]]  # 輸出 array([2, 4, 4, 6, 8, 8, 8])
arr2[-1] = 1024  # 修改值,不影響arr1
# ?維
arr2d = np.array([[1, 3, 5, 7, 9], [2, 4, 6, 8, 10], [12, 18, 22, 23, 37],
                  [123, 55, 17, 88, 103]])  # shape(4,5)
arr2d[[1, 3]]  # 獲取第??和第四?撵孤,索引從0開(kāi)始的所以1對(duì)應(yīng)第??
# 輸出 array([[ 2, 4, 6, 8, 10],
# [123, 55, 17, 88, 103]])
arr2d[([1,3],[2,4])] # 相當(dāng)于arr2d[1,2]獲取?個(gè)元素,arr2d[3,4]獲取另?個(gè)元素
# 輸出為 array([ 6, 103])
# 選擇?個(gè)區(qū)域
arr2d[np.ix_([1,3,3,3],[2,4,4])] # 相當(dāng)于 arr2d[[1,3,3,3]][:,[2,4,4]]
arr2d[[1,3,3,3]][:,[2,4,4]]
# ix_()函數(shù)可?于組合不同的向量
# 第?個(gè)列表存的是待提取元素的?標(biāo)迈着,第?個(gè)列表存的是待提取元素的列標(biāo)
# 輸出為
# array([[ 6, 10, 10],
# [ 17, 103, 103],
# [ 17, 103, 103],
# [ 17, 103, 103]])

boolean值索引
names =
np.array(['softpo','Brandon','Will','Michael','Will','Ella','Daniel','softpo','
Will','Brandon'])
cond1 = names == 'Will'
cond1
# 輸出array([False, False, True, False, True, False, False, False, True,
False])
names[cond1] # array(['Will', 'Will', 'Will'], dtype='<U7')
arr = np.random.randint(0,100,size = (10,8)) # 0~100隨機(jī)數(shù)
cond2 = arr > 90
# 找到所有?于90的索引,返回boolean類

形狀操作

數(shù)組變形-從原來(lái)數(shù)組順序取數(shù)拼湊變形后的數(shù)組
import numpy as np
arr1 = np.random.randint(0,10,size = (3,4,5))
arr2 = arr1.reshape(12,5) # 形狀改變邪码,返回新數(shù)組
arr3 = arr1.reshape(-1,5) # ?動(dòng)“整形”裕菠,?動(dòng)計(jì)算
數(shù)組轉(zhuǎn)置-行轉(zhuǎn)列,列轉(zhuǎn)行-   都不會(huì)改變?cè)瓟?shù)組
import numpy as np
arr1 = np.random.randint(0,10,size = (3,5)) # shape(3,5)
arr1.T # shape(5,3) 轉(zhuǎn)置
arr2 = np.random.randint(0,10,size = (3,6,4)) # shape(3,6,4),
np.transpose(arr2,axes=(2,0,1)) # transpose改變數(shù)組維度 shape(4,3,6)
數(shù)組堆疊
import numpy as np
arr1 = np.array([[1,2,3]])
arr2 = np.array([[4,5,6]])
np.concatenate([arr1,arr2],axis = 0)
# 串聯(lián)合并shape(2,3) axis = 0表示第?維串聯(lián) 輸出為
# array([[1, 2, 3],
# [4, 5, 6]])
np.concatenate([arr1,arr2],axis = 1)
# shape(1,6) axis = 1表示第?維串聯(lián) 輸出為:array([[1, 2, 3, 4, 5, 6]])
np.hstack((arr1,arr2)) # ?平?向堆疊 輸出為:array([[1, 2, 3, 4, 5, 6]])
np.vstack((arr1,arr2))
#篩選數(shù)組闭专,保留第5列滿足條件的行
arr_new = arr_old[arr_old[:,4]>=條件,:]
# 豎直?向堆疊奴潘,輸出為:
# array([[1, 2, 3],
# [4, 5, 6]])
split數(shù)組拆分
import numpy as np
arr = np.random.randint(0,10,size = (6,5)) # shape(6,5)
np.split(arr,indices_or_sections=2,axis = 0) # 在第?維(6)平均分成兩份
np.split(arr,indices_or_sections=[2,3],axis = 1) # 在第?維(5)以索引2,3為斷點(diǎn)分割
成3份
np.vsplit(arr,indices_or_sections=3) # 在豎直?向平均分割成3份
np.hsplit(arr,indices_or_sections=[1,4]) # 在?平?向影钉,以索引1画髓,4為斷點(diǎn)分割成3份

?播機(jī)制

當(dāng)兩個(gè)數(shù)組的形狀并不相同的時(shí)候,我們可以通過(guò)擴(kuò)展數(shù)組的?法來(lái)實(shí)現(xiàn)相加平委、相減奈虾、相乘等操作,這
種機(jī)制叫做?播(broadcasting),行不夠向行上廣播(復(fù)制相同的運(yùn)算)廉赔,列不夠向列上廣播(復(fù)制相同的運(yùn)算)肉微;廣播時(shí)數(shù)組要對(duì)齊


image.png

import numpy as np
arr1 = np.sort(np.array([0,1,2,3]*3)).reshape(4,3) #shape(4,3)
arr2 = np.array([1,2,3]) # shape(3,)
arr3 = arr1 + arr2 # arr2進(jìn)??播復(fù)制4份 shape(4,3)
arr3


image.png

import numpy as np
arr1 = np.sort(np.array([0, 1, 2, 3] * 3)).reshape(4, 3) # shape(4,3)
arr2 = np.array([[1], [2], [3], [4]]) # shape(4,1)

arr3 = arr1 + arr2 # arr2 進(jìn)??播復(fù)制3份 shape(4,3)
arr3


image.png

import numpy as np
arr1 = np.array([0, 1, 2, 3, 4, 5, 6, 7] * 3).reshape(3, 4, 2) # shape(3,4,2)
arr2 = np.array([0, 1, 2, 3, 4, 5, 6, 7]).reshape(4, 2) # shape(4,2)
arr3 = arr1 + arr2 # arr2數(shù)組在0維上復(fù)制3份 shape(3,4,2)
arr3
image.png

通?函數(shù)

通?函數(shù):元素級(jí)數(shù)字函數(shù)
import numpy as np
arr1 = np.array([1, 4, 8, 9, 16, 25])
np.sqrt(arr1)  # 開(kāi)平?
np.square(arr1)  # 平?
np.clip(arr1, 2, 16)  # 輸出 array([ 2, 4, 8, 9, 16, 16]),將arr1限制在2,16之間蜡塌,超出范圍的都置為對(duì)應(yīng)邊界的值
x = np.array([1, 5, 2, 9, 3, 6, 8])
y = np.array([2, 4, 3, 7, 1, 9, 0])
np.maximum(x, y)  # 返回兩個(gè)數(shù)組中的?較?的值array([2, 5, 3, 9, 3, 9, 8])
arr2 = np.random.randint(0, 10, size=(5, 5))
np.inner(arr2[0], arr2)  # 返回?維數(shù)組向量?jī)?nèi)積 array([15,  6,  4, 14,  6])
where函數(shù)
import numpy as np
arr1 = np.array([1, 3, 5, 7, 9])
arr2 = np.array([2, 4, 6, 8, 10])
cond = np.array([True, False, True, True, False])
np.where(cond, arr1, arr2)  # True選擇arr1碉纳,F(xiàn)alse選擇arr2的值
# 輸出 array([ 1, 4, 5, 7, 10])
arr3 = np.random.randint(0, 30, size=20)
np.where(arr3 < 15, arr3, -15)  # ?于15還是?身的值,?于15設(shè)置成-15
排序?法
import numpy as np
arr = np.array([9, 3, 11, 6, 17, 5, 4, 15, 1])
arr.sort()  # 直接改變?cè)瓟?shù)組
np.sort(arr)  # 返回深拷?排序結(jié)果
arr = np.array([9, 3, 11, 6, 17, 5, 4, 15, 1])
arr.argsort()  # 返回從?到?排序索引 array([8, 1, 6, 5, 3, 0, 2, 7, 4])
集合運(yùn)算函數(shù)
A = np.array([2,4,6,8])
B = np.array([3,4,5,6])
np.intersect1d(A,B) # 交集 array([4, 6])
np.union1d(A,B) # 并集 array([2, 3, 4, 5, 6, 8])
np.setdiff1d(A,B) #差集馏艾,A中有劳曹,B中沒(méi)有 array([2, 8])
數(shù)學(xué)和統(tǒng)計(jì)函數(shù)
import numpy as np
arr1 = np.array([1,7,2,19,23,0,88,11,6,11])
arr1.min() # 計(jì)算最?值 0
arr1.argmax() # 計(jì)算最?值的索引 返回 6
np.argwhere(arr1 > 20) # 返回?于20的元素的索引
np.cumsum(arr1) # 計(jì)算累加和
arr2 = np.random.randint(0,10,size = (4,5))
arr2.mean(axis = 0) # 計(jì)算列的平均值
arr2.mean(axis = 1) # 計(jì)算?的平均值
np.cov(arr2,rowvar=True) # 協(xié)?差矩陣
np.corrcoef(arr2,rowvar=True) # 相關(guān)性系數(shù)

線性代數(shù)

#矩陣的乘積
A = np.array([[4,2,3],
[1,3,1]]) # shape(2,3)
B = np.array([[2,7],
[-5,-7],
[9,3]]) # shape(3,2)
np.dot(A,B) # 矩陣運(yùn)算 A的最后?維和B的第?維必須?致
A @ B # 符號(hào) @ 表示矩陣乘積運(yùn)算

# 計(jì)算矩陣的逆
from numpy.linalg import inv, det, eig, qr, svd
A = np.array([[1, 2, 3],
              [2, 3, 4],
              [4, 5, 8]])  # shape(3,3)
inv(t)  # 逆矩陣
det(t)  # 計(jì)算矩陣?列式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奴愉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铁孵,更是在濱河造成了極大的恐慌锭硼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库菲,死亡現(xiàn)場(chǎng)離奇詭異账忘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熙宇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鳖擒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人烫止,你說(shuō)我怎么就攤上這事蒋荚。” “怎么了馆蠕?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵期升,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我互躬,道長(zhǎng)播赁,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任吼渡,我火速辦了婚禮容为,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寺酪。我一直安慰自己坎背,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布寄雀。 她就那樣靜靜地躺著得滤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盒犹。 梳的紋絲不亂的頭發(fā)上懂更,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音阿趁,去河邊找鬼膜蛔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脖阵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播墅茉,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼命黔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呜呐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起悍募,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蘑辑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坠宴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洋魂,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年喜鼓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了副砍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡庄岖,死狀恐怖豁翎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情隅忿,我是刑警寧澤心剥,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站背桐,受9級(jí)特大地震影響优烧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜链峭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一畦娄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熏版,春花似錦纷责、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至曲横,卻和暖如春喂柒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背禾嫉。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工灾杰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熙参。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓艳吠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親孽椰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昭娩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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