第四課:本課內容:
? 0. 導入 NumPy 包
? 1. 創(chuàng)建 NumPy 數組
? 2. 索引和切片
? 3. 讀取文件
? 4. 布爾型索引
? 5. 數組的運算
? 6. 常用函數舉例
NumPy 是 Numerical Python 的簡稱,是 Python 科學計算的核心包,也是高性能科學計算和數據分析的基礎包。
numpy特性:
具備功能非常強大的多維數組
具備對整個數組進行快速運算的函數
線性代數計算 隨機數生成
可集成C/C++以及Fortran等語言
Numpy數組中的元素只能是同一種數據類型
Numpy數組的運算,更簡潔且高效。
?0. 導入 NumPy 包

用as語句倒入numpy包,后面用簡寫的 np ,就可以使用了。
1. 創(chuàng)建 NumPy 數組
numpy的一個重要對象(object)是 ndarray, 也稱 NumPy 數組
? ndarray 是 Multidimensional Array的縮寫,中文稱為多(multi)維(dimensional)數組(array)。
? 數組可以存儲大量數據并在其進行數學運算,我們可以使用數組在一塊數據上進行操作從而避免使用循環(huán)來操作單個元素。
1-1 一維數組

In[ 2 ] 中是把1,2,3這個列表轉換成一維數組。賦值定義成 “ arr1d ”。
In[ 3 ] 區(qū)分賦值的 “ arr1d ” 類型,返回結果是一個Numpy類型的數組。
In[ 4 ] 返回值是1,代表是一個一維數組。
1-2 二維數組

上圖是把一個二維列表轉換成一個二維數組,用和一維數組一樣的方法。
二維數組就類似一個矩陣
? 0軸 (axis=0) 是列,也就是垂直方向
? 1軸 (axis=1) 是行,也就是水平方向
? 矩陣對于數據分析來說,是一個重要的概念,一般用列來代表觀測對象的各種屬性、特征,用行來記錄每一個觀測對象的一組測量數據
此時文科生覺得,這不是和我大學上的線性代數長得一毛一樣嗎??好像有點懂了~~

看來Numpy中,是用 ndim 來找出數組是多少維的。第7行是可以顯示整個數組的行和列是多少。能夠想象可以使用的地方就是那些超級長超級寬的一堆數組里面,做一些統(tǒng)計之前可以先看看整個數組有多巨大,或者通過這樣的定義,讓后面的數據統(tǒng)計可以更加方便。
這里還是要說說我的看法,往往在學習一樣新的東西時,開始打基礎的過程挺漫長挺難熬的,畢竟幾乎都是以前沒有接觸過的新詞匯,理解了一個新的,可能昨天記下的就忘記了。這樣反復發(fā)過程經常都會懷疑人生:“我他媽學這破玩意干什么???!”
然后又成功從入門到放棄。
所以我在學習的過程之中,盡量多地去想,它能夠在什么地方可以使用,使用場景是什么,要是去用的話怎么用,可以發(fā)揮什么作用。我們這些功利的人類啊,往往在這樣腦補的情況下,加重了它們的重要性,于是覺得自己應該繼續(xù)學下去,可以讓后面的工作加快一點。催眠自己,有時候挺管用的??
1-3 其他快速創(chuàng)建數組的函數
? 一維數組

老師說,上面這幾個例子都太簡單了,然后就一掠而過了??????看起來好像比較簡單,能夠理解。就是不知道為什么要弄未初始化的垃圾值,我告訴自己不要陷進“垃圾值”這個詞里面嘗試理解為什么叫做垃圾值,但是無法停止這個大腦不去想?。?/p>

arange是range函數的數組版,輸出的值從0到9,不包括10,共十個數字。注意這里的括號,先用方括號括里面,然后外面是圓括號。我的理解是里面類似數列一樣的一排元素,外面的圓括號是為了迎合數組里array這個函數,顯示這組數組是array的人。
上面的11是顯示一排范圍內的值,而12是在一個范圍內的值里面挑出滿足條件的元素出來,形成一個新的數列。這個條件就是:從2開始(包括2)開始算起,每個值從2開始加2,到10(不包括10)結束。其實也就是從2到10 的偶數數列。這個公式是這樣的:
?np.arange(起始值,終值(不包含終值),步長)

創(chuàng)建0到1點隨機數,請注意0左邊是方括號,1右邊是圓括號(我也不知道為什么要注意??就是看出來是不一樣的,但是不知道為什么要有區(qū)別)
13這個例子上課的時候我就有點迷惑,難道電腦隨機出來的小數點后位數都是一致的嗎?看起來太整齊了,都是8位數?。{什么就是8?
14這個例子老師直接跳過了。。。沒看懂哦,1到10的隨機整數,后面的size=8 是啥?
? 二維數組

一維數組和二維數組的區(qū)別就是行數的區(qū)別,一維的是1行,二維的是N行。
一維數組創(chuàng)建全0數組的語法是:
np.zeros(5)
創(chuàng)建一個5個0的數組;二維數組中,創(chuàng)建一個全0數組,語法也是一樣的,只不過這里是需要設定行和列,2行3列的:
np.zeros ( (2,3) )
我又要說,注意括號了。兩個圓括號。
上課的時候小伙伴問隨機數組有什么用,我當時想的是:抽獎??!像轉發(fā)微博中經常會用到公證的第三方來顯示公平公正公開,我猜測抽獎用的工具就是類似這樣的程序。只不過別人設定的是整數的,我們上課的例子是有8位小數點的。
? ?索引和切片的混用
方括號第一個參數指定要取的行位置,第二個參數指定要取得列位置,中間使用逗號隔開.
一維數組:使用[ ]運算符,類似于Python列表。
二維數組:方括號中第一個參數對應行,第二個參數對應行,中間用逗號隔開。
數組切片是原始數組的視圖,也就是說數據不會被復制,任何修改都會影響到原有的數組上。
一維數組與一維數組的索引:

一維數組 切片:

更改數組切片后:

這個例子就是上面灰色區(qū)域說的 “數組切片是原始數組的視圖,也就是說數據不會被復制,任何修改都會影響到原有的數組上。” 后面我們對數組進行的任何修改,都會更新此數組。它們是墻頭草。。。誰最新就往哪邊倒??
而有時候我們是需要更改數據,但是又想在后面的操作繼續(xù)使用原始數據,也就是,在不更改原始數據的基礎上,修改數組中的元素。這個聽起來挺像word文檔里面的 “另保存” 的。這個時候我們需要用到 .copy() 這個語法。

一個都沒少的原始數組們。而重新賦值的 arr3 是這樣的:

二維數組的索引和切片:

和一維數組不一樣的,首先就是前綴,這里是用 mat ,一維數組是用 arr ;
二維數組有一個一維數組沒有的 shape,來定義限制整個數組的行和列。
獲取二維數組的某一行:
? mat[起始行:終結行] :從起始行開始,但不包括終結行
? mat[起始行:] : 從起始行到最后一行
? mat[: 終結行] : 從第0行到終結行但不包括終結行

方括號包裹元素,獲取第0行。

還是方括號,獲取1-3行,不包括第三行。
? 獲取二維數組的行和列
? 查看某一個元素,有兩種方式:
這里的例子還是這個4*4的表格:




數字后面加冒號表示 從這個數字開始,直到這個數組的世界盡頭!
作業(yè)4-1:
生成一個3行5列的數組,元素值從1到15排列
1 ,取出其中的第1行,第3列元素
2 ,取出其中的第2行到最后一行
3, 取出其中的第1行到第2行,第1列到最后一列
4 ,取出其中的第0行和第2行,第三列
我第一次覺得作業(yè)那么順暢?。。?!竟然都做出來了,證明這作業(yè)不難!??
你們看完這課程內容應該也能順利做出來的,因為老師布置的作業(yè)幾乎是把答案寫在題目上了,想要把第0行當作第1行都沒辦法犯錯??。
試試吧。
我做的如下,大家看看我有沒有出錯吧~

剩余第四課的內容:導入 NumPy 包/創(chuàng)建 NumPy 數組/?索引和切片
? 3. 讀取文件
? 4. 布爾型索引
? 5. 數組的運算
? 6. 常用函數舉例
明天繼續(xù)碼第四課剩余內容喲~