這個(gè)編程系列我采用的方法是,照著老師課件一步步跟做,遇到問題就記錄,能搜索解決就搜索解決,搜不到的去提問,盡量找到解答。
簡(jiǎn)書專欄里有非常完備的新手上路指南(從下載軟件開始),我就不一步步搬運(yùn)了。
這里主要是根據(jù)我在操作時(shí)出錯(cuò)的地方,從小白的角度做下總結(jié),同時(shí)也分享入門路上的體驗(yàn),希望能對(duì)你有點(diǎn)幫助。
NumPy入門
本文分三段,第一部分課程內(nèi)容提取回顧,第二部分操作中問題總結(jié),最后是心得。
一、內(nèi)容提取
NumPy(Numerical Python)是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包,通俗點(diǎn)說,它是Python里已有的工具包,提前將各種功能打包好,形成不同的工具裝在里面,需要的時(shí)候直接提取,用來數(shù)據(jù)分析即可(或許以后還有更多更強(qiáng)大的功能)。
就好像需要砸釘子的時(shí)候去拿錘子,需要擰螺絲的時(shí)候去拿螺絲刀,?『NumPy工具包』這個(gè)叫法可以說很形象了。
NumPy的一個(gè)重要對(duì)象是數(shù)組,操作都是針對(duì)數(shù)組進(jìn)行。
一個(gè)數(shù)組里可以存一堆數(shù)據(jù),每一次操作就可以針對(duì)批量數(shù)據(jù)進(jìn)行,不需要挨個(gè)循環(huán)到每一個(gè)元素。
數(shù)組:
※ 一維數(shù)組類似于列表
大概長(zhǎng)這樣 […, …, …, …, …]
※ 二維數(shù)組類似于矩陣
大概長(zhǎng)這樣
[…,…,…
…,…,…]
對(duì)數(shù)組的操作:
※ 創(chuàng)建——舉例??
np.zeros(5) ??5個(gè)元素全0的數(shù)組
np.ones(5) ??5個(gè)元素全1的數(shù)組
np.empty(10) ??10個(gè)元素的空數(shù)組,會(huì)返回隨機(jī)數(shù)
np.arrange(10) ??元素從0到9的數(shù)組
np.arrange(啟示值, 步長(zhǎng), 終值) ??等差數(shù)列數(shù)組
np.random.rand(5) ??5個(gè)[0,1)之間的隨機(jī)數(shù)數(shù)組
np.random.randint(1, 10, size=8) ??指定范圍內(nèi)的隨機(jī)整數(shù)數(shù)組
np.zeros((2,3)) ? 兩行三列0,以元組(2,3)為參數(shù)
np.random.rand(3, 5) ? 三行五列隨機(jī)二維數(shù)組,直接以3,5為參數(shù),不同于上
※ 索引切片——舉例??
總的來說,使用[ ]進(jìn)行操作。
一維數(shù)組切片舉例:
arr[3:7] arr[3] ?針對(duì)切片的修改會(huì)影響原來數(shù)組
arr[3:7].copy() ? 相當(dāng)于生成一個(gè)切片的副本,針對(duì)副本的修改不會(huì)影響原來數(shù)組
二維數(shù)組切片舉例:
mat[0] 取一行
mat[3][3]? mat[3,3] ?取第三行第三列某個(gè)元素
索引切片混用:
mat[0:3, 1]? 0~2行,第1列
mat[2:, 2:]? 第2行到最后,第2列到最后
布爾型索引
相當(dāng)于建一串True和False的篩子作為索引,只有True對(duì)應(yīng)的值能通過(印象深刻,值得琢磨)
※ 數(shù)組運(yùn)算
總的來說采用一一對(duì)應(yīng)操作,與矩陣計(jì)算不同。
可對(duì)一個(gè)二維數(shù)組操作,比如一個(gè)數(shù)組對(duì)一個(gè)數(shù)進(jìn)行+ - * /運(yùn)算。
也可在兩個(gè)數(shù)組之間操作,兩個(gè)數(shù)組之間+ - * /,對(duì)應(yīng)元素直接運(yùn)算,但要行列數(shù)一樣。
np下的常用函數(shù)(工具包里常用工具):
np.sum() ??數(shù)組求和
np.sum(數(shù)組名,axis=1) ??對(duì)行求和
np.sum(數(shù)組名,axis=0) ??對(duì)列求和
注:sum換成mean就以求每列的均值,換成max和min是求每列最大最小值
np.sort(數(shù)組名[:, 0] )對(duì)第0列排序,值從小到大
np.unique(數(shù)組名[:, 列索引]某列中不重復(fù)的數(shù)據(jù)
np.where(判斷條件,True下的結(jié)果,F(xiàn)alse下的結(jié)果)對(duì)應(yīng)不同條件,產(chǎn)生不同結(jié)果
二、問題總結(jié):
1、一般開始之前使用 『import numpy as np』導(dǎo)入工具包,接下來的命令前要帶上『np.』,說明是從這個(gè)工具包里取的工具。
2、出錯(cuò)的話,注意看error說明,^代表可能出問題的地方,可著重關(guān)注。
3、括號(hào)要成對(duì)!檢查tips:將鼠標(biāo)點(diǎn)在一個(gè)括號(hào)處,和它成對(duì)的括號(hào)就會(huì)變色。
4、凡是提到『第幾行』,指的都是索引(0,1,2……),而非通常所說的行數(shù)(1,2,3……),因?yàn)閷忣}不對(duì)做錯(cuò)了好幾題??。。
5、做完作業(yè)對(duì)答案的時(shí)候,發(fā)現(xiàn)很多寫了幾行命令才實(shí)現(xiàn)的操作,其實(shí)用一條語句即可實(shí)現(xiàn),比如以下這個(gè)簡(jiǎn)單的定義過程。
估計(jì)學(xué)得多了,最主要是用得多了,慢慢能掌握更多類似的簡(jiǎn)練語句。
三、心得:
本節(jié)課沒有來及聽完回放,最后的紅酒例子那里只是照著課件敲了一遍,感覺還是跟聽課不大一樣。
聽課之所以更有效,是因?yàn)橛欣蠋煹乃悸?,她?huì)在一些地方給出恰當(dāng)?shù)慕忉尯椭笇?dǎo),這些貌似一帶而過的一兩句話,聽進(jìn)去了,就會(huì)立竿見影起效。對(duì)于一張白紙來說,多畫一筆,就能更清晰一分,即便只是草圖。
如果要靠自己去獲取,可能得等到積累到一定程度,思考框架差不多也建立起來的時(shí)候,方能前后串起來,get到其中的一點(diǎn)真意。
所以,這次算是教訓(xùn)。
Python筆記系列(不只是筆記):