第四課:本課內(nèi)容:
? 0. 導(dǎo)入 NumPy 包
? 1. 創(chuàng)建 NumPy 數(shù)組
? 2. 索引和切片
? 3. 讀取文件
? 4. 布爾型索引
? 5. 數(shù)組的運(yùn)算
? 6. 常用函數(shù)舉例
NumPy 是 Numerical Python 的簡稱芋哭,是 Python 科學(xué)計(jì)算的核心包复局,也是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。
numpy特性:
具備功能非常強(qiáng)大的多維數(shù)組
具備對整個(gè)數(shù)組進(jìn)行快速運(yùn)算的函數(shù)
線性代數(shù)計(jì)算 隨機(jī)數(shù)生成
可集成C/C++以及Fortran等語言
Numpy數(shù)組中的元素只能是同一種數(shù)據(jù)類型
Numpy數(shù)組的運(yùn)算傍念,更簡潔且高效歪架。
?0. 導(dǎo)入 NumPy 包
用as語句倒入numpy包股冗,后面用簡寫的 np ,就可以使用了和蚪。
1. 創(chuàng)建 NumPy 數(shù)組
numpy的一個(gè)重要對象(object)是 ndarray魁瞪, 也稱 NumPy 數(shù)組
? ndarray 是 Multidimensional Array的縮寫,中文稱為多(multi)維(dimensional)數(shù)組(array)惠呼。
? 數(shù)組可以存儲(chǔ)大量數(shù)據(jù)并在其進(jìn)行數(shù)學(xué)運(yùn)算导俘,我們可以使用數(shù)組在一塊數(shù)據(jù)上進(jìn)行操作從而避免使用循環(huán)來操作單個(gè)元素。
1-1 一維數(shù)組
In[ 2 ] 中是把1剔蹋,2旅薄,3這個(gè)列表轉(zhuǎn)換成一維數(shù)組。賦值定義成 “ arr1d ”泣崩。
In[ 3 ] 區(qū)分賦值的 “ arr1d ” 類型少梁,返回結(jié)果是一個(gè)Numpy類型的數(shù)組。
In[ 4 ] 返回值是1矫付,代表是一個(gè)一維數(shù)組凯沪。
1-2 二維數(shù)組
上圖是把一個(gè)二維列表轉(zhuǎn)換成一個(gè)二維數(shù)組,用和一維數(shù)組一樣的方法买优。
二維數(shù)組就類似一個(gè)矩陣
? 0軸 (axis=0) 是列妨马,也就是垂直方向
? 1軸 (axis=1) 是行,也就是水平方向
? 矩陣對于數(shù)據(jù)分析來說杀赢,是一個(gè)重要的概念烘跺,一般用列來代表觀測對象的各種屬性、特征脂崔,用行來記錄每一個(gè)觀測對象的一組測量數(shù)據(jù)
此時(shí)文科生覺得滤淳,這不是和我大學(xué)上的線性代數(shù)長得一毛一樣嗎??好像有點(diǎn)懂了~~
看來Numpy中,是用 ndim 來找出數(shù)組是多少維的砌左。第7行是可以顯示整個(gè)數(shù)組的行和列是多少脖咐。能夠想象可以使用的地方就是那些超級長超級寬的一堆數(shù)組里面,做一些統(tǒng)計(jì)之前可以先看看整個(gè)數(shù)組有多巨大汇歹,或者通過這樣的定義屁擅,讓后面的數(shù)據(jù)統(tǒng)計(jì)可以更加方便。
這里還是要說說我的看法秤朗,往往在學(xué)習(xí)一樣新的東西時(shí)煤蹭,開始打基礎(chǔ)的過程挺漫長挺難熬的,畢竟幾乎都是以前沒有接觸過的新詞匯,理解了一個(gè)新的硝皂,可能昨天記下的就忘記了常挚。這樣反復(fù)發(fā)過程經(jīng)常都會(huì)懷疑人生:“我他媽學(xué)這破玩意干什么?;铩奄毡!”
然后又成功從入門到放棄。
所以我在學(xué)習(xí)的過程之中贝或,盡量多地去想吼过,它能夠在什么地方可以使用,使用場景是什么咪奖,要是去用的話怎么用盗忱,可以發(fā)揮什么作用。我們這些功利的人類啊羊赵,往往在這樣腦補(bǔ)的情況下趟佃,加重了它們的重要性,于是覺得自己應(yīng)該繼續(xù)學(xué)下去昧捷,可以讓后面的工作加快一點(diǎn)闲昭。催眠自己,有時(shí)候挺管用的??
1-3 其他快速創(chuàng)建數(shù)組的函數(shù)
? 一維數(shù)組
老師說靡挥,上面這幾個(gè)例子都太簡單了序矩,然后就一掠而過了??????看起來好像比較簡單,能夠理解跋破。就是不知道為什么要弄未初始化的垃圾值簸淀,我告訴自己不要陷進(jìn)“垃圾值”這個(gè)詞里面嘗試?yán)斫鉃槭裁唇凶隼担菬o法停止這個(gè)大腦不去想搬V颉啃擦!
arange是range函數(shù)的數(shù)組版囊蓝,輸出的值從0到9饿悬,不包括10,共十個(gè)數(shù)字聚霜。注意這里的括號(hào)狡恬,先用方括號(hào)括里面,然后外面是圓括號(hào)蝎宇。我的理解是里面類似數(shù)列一樣的一排元素弟劲,外面的圓括號(hào)是為了迎合數(shù)組里array這個(gè)函數(shù),顯示這組數(shù)組是array的人姥芥。
上面的11是顯示一排范圍內(nèi)的值兔乞,而12是在一個(gè)范圍內(nèi)的值里面挑出滿足條件的元素出來,形成一個(gè)新的數(shù)列。這個(gè)條件就是:從2開始(包括2)開始算起庸追,每個(gè)值從2開始加2霍骄,到10(不包括10)結(jié)束。其實(shí)也就是從2到10 的偶數(shù)數(shù)列淡溯。這個(gè)公式是這樣的:
?np.arange(起始值读整,終值(不包含終值),步長)
創(chuàng)建0到1點(diǎn)隨機(jī)數(shù)咱娶,請注意0左邊是方括號(hào)米间,1右邊是圓括號(hào)(我也不知道為什么要注意??就是看出來是不一樣的,但是不知道為什么要有區(qū)別)
13這個(gè)例子上課的時(shí)候我就有點(diǎn)迷惑膘侮,難道電腦隨機(jī)出來的小數(shù)點(diǎn)后位數(shù)都是一致的嗎屈糊?看起來太整齊了,都是8位數(shù)扒砹恕另玖!憑什么就是8?
14這個(gè)例子老師直接跳過了表伦。谦去。。沒看懂哦蹦哼,1到10的隨機(jī)整數(shù)鳄哭,后面的size=8 是啥?
? 二維數(shù)組
一維數(shù)組和二維數(shù)組的區(qū)別就是行數(shù)的區(qū)別纲熏,一維的是1行妆丘,二維的是N行。
一維數(shù)組創(chuàng)建全0數(shù)組的語法是:
np.zeros(5)
創(chuàng)建一個(gè)5個(gè)0的數(shù)組局劲;二維數(shù)組中勺拣,創(chuàng)建一個(gè)全0數(shù)組,語法也是一樣的鱼填,只不過這里是需要設(shè)定行和列药有,2行3列的:
np.zeros ( (2,3) )
我又要說,注意括號(hào)了苹丸。兩個(gè)圓括號(hào)愤惰。
上課的時(shí)候小伙伴問隨機(jī)數(shù)組有什么用,我當(dāng)時(shí)想的是:抽獎(jiǎng)白咐怼宦言!像轉(zhuǎn)發(fā)微博中經(jīng)常會(huì)用到公證的第三方來顯示公平公正公開,我猜測抽獎(jiǎng)用的工具就是類似這樣的程序商模。只不過別人設(shè)定的是整數(shù)的奠旺,我們上課的例子是有8位小數(shù)點(diǎn)的蜘澜。
? ?索引和切片的混用
方括號(hào)第一個(gè)參數(shù)指定要取的行位置,第二個(gè)參數(shù)指定要取得列位置响疚,中間使用逗號(hào)隔開.
一維數(shù)組:使用[ ]運(yùn)算符兼都,類似于Python列表。
二維數(shù)組:方括號(hào)中第一個(gè)參數(shù)對應(yīng)行稽寒,第二個(gè)參數(shù)對應(yīng)行扮碧,中間用逗號(hào)隔開。
數(shù)組切片是原始數(shù)組的視圖杏糙,也就是說數(shù)據(jù)不會(huì)被復(fù)制慎王,任何修改都會(huì)影響到原有的數(shù)組上。
一維數(shù)組與一維數(shù)組的索引:
一維數(shù)組 切片:
更改數(shù)組切片后:
這個(gè)例子就是上面灰色區(qū)域說的 “數(shù)組切片是原始數(shù)組的視圖宏侍,也就是說數(shù)據(jù)不會(huì)被復(fù)制赖淤,任何修改都會(huì)影響到原有的數(shù)組上×潞樱” 后面我們對數(shù)組進(jìn)行的任何修改咱旱,都會(huì)更新此數(shù)組。它們是墻頭草绷耍。吐限。。誰最新就往哪邊倒??
而有時(shí)候我們是需要更改數(shù)據(jù)褂始,但是又想在后面的操作繼續(xù)使用原始數(shù)據(jù)诸典,也就是,在不更改原始數(shù)據(jù)的基礎(chǔ)上崎苗,修改數(shù)組中的元素狐粱。這個(gè)聽起來挺像word文檔里面的 “另保存” 的。這個(gè)時(shí)候我們需要用到 .copy() 這個(gè)語法胆数。
一個(gè)都沒少的原始數(shù)組們肌蜻。而重新賦值的 arr3 是這樣的:
二維數(shù)組的索引和切片:
和一維數(shù)組不一樣的,首先就是前綴必尼,這里是用 mat 凌外,一維數(shù)組是用 arr 嘁灯;
二維數(shù)組有一個(gè)一維數(shù)組沒有的 shape私爷,來定義限制整個(gè)數(shù)組的行和列仅政。
獲取二維數(shù)組的某一行:
? mat[起始行:終結(jié)行] :從起始行開始苛骨,但不包括終結(jié)行
? mat[起始行:] : 從起始行到最后一行
? mat[: 終結(jié)行] : 從第0行到終結(jié)行但不包括終結(jié)行
方括號(hào)包裹元素庆寺,獲取第0行涨椒。
還是方括號(hào)镣陕,獲取1-3行斑司,不包括第三行渗饮。
? 獲取二維數(shù)組的行和列
? 查看某一個(gè)元素但汞,有兩種方式:
這里的例子還是這個(gè)4*4的表格:
數(shù)字后面加冒號(hào)表示 從這個(gè)數(shù)字開始私蕾,直到這個(gè)數(shù)組的世界盡頭!
作業(yè)4-1:
生成一個(gè)3行5列的數(shù)組胡桃,元素值從1到15排列
1 ,取出其中的第1行踩叭,第3列元素
2 ,取出其中的第2行到最后一行
3, 取出其中的第1行到第2行,第1列到最后一列
4 ,取出其中的第0行和第2行翠胰,第三列
我第一次覺得作業(yè)那么順暢H荼础!V啊斤富!竟然都做出來了,證明這作業(yè)不難锻狗!??
你們看完這課程內(nèi)容應(yīng)該也能順利做出來的满力,因?yàn)槔蠋煵贾玫淖鳂I(yè)幾乎是把答案寫在題目上了,想要把第0行當(dāng)作第1行都沒辦法犯錯(cuò)??轻纪。
試試吧油额。
我做的如下,大家看看我有沒有出錯(cuò)吧~
剩余第四課的內(nèi)容:導(dǎo)入 NumPy 包/創(chuàng)建 NumPy 數(shù)組/?索引和切片
? 3. 讀取文件
? 4. 布爾型索引
? 5. 數(shù)組的運(yùn)算
? 6. 常用函數(shù)舉例
明天繼續(xù)碼第四課剩余內(nèi)容喲~