文科生學Python系列7: Numpy數組/索引和切片

第四課:本課內容:

? 0. 導入 NumPy 包

? 1. 創(chuàng)建 NumPy 數組

? 2. 索引和切片

? 3. 讀取文件

? 4. 布爾型索引

? 5. 數組的運算

? 6. 常用函數舉例

NumPy 是 Numerical Python 的簡稱,是 Python 科學計算的核心包,也是高性能科學計算和數據分析的基礎包。

numpy特性:

具備功能非常強大的多維數組

具備對整個數組進行快速運算的函數

線性代數計算 隨機數生成

可集成C/C++以及Fortran等語言

Numpy數組中的元素只能是同一種數據類型

Numpy數組的運算,更簡潔且高效。

?0. 導入 NumPy 包

導入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的表格:

例子原始數據


查找第1行第3列的元素,2種方法


查找0-3行,第1列的內容


二維數組的切片

數字后面加冒號表示 從這個數字開始,直到這個數組的世界盡頭!

作業(yè)4-1:

生成一個3行5列的數組,元素值從1到15排列

1 ,取出其中的第1行,第3列元素

2 ,取出其中的第2行到最后一行

3, 取出其中的第1行到第2行,第1列到最后一列

4 ,取出其中的第0行和第2行,第三列

我第一次覺得作業(yè)那么順暢?。。?!竟然都做出來了,證明這作業(yè)不難!??

你們看完這課程內容應該也能順利做出來的,因為老師布置的作業(yè)幾乎是把答案寫在題目上了,想要把第0行當作第1行都沒辦法犯錯??。

試試吧。

我做的如下,大家看看我有沒有出錯吧~


作業(yè)


剩余第四課的內容:導入 NumPy 包/創(chuàng)建 NumPy 數組/?索引和切片

? 3. 讀取文件

? 4. 布爾型索引

? 5. 數組的運算

? 6. 常用函數舉例

明天繼續(xù)碼第四課剩余內容喲~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容