在使用numpy對ndarray對象進行處理時,我們動輒就會碰到大於二維的數據。這時候,很多小朋友肯定會犯難,如何理解這些數據?怎麼才能在腦海裡把這些數據跟我們的現實生活聯繫起來進行理解呢?今天,我帶大家通過一個實例來深入理解一下這個數據結構。
【問 題】
我們手頭有一棟新樓房(樓房沒有門牌號),裡面住著n個小豬佩奇。有一天,來了一隻笨笨的佩奇,它找不到自己的家了。我們如何幫小豬佩奇梳理思路,找到家呢?有沒有好的數據結構,能精確定位某一個小豬佩奇?
【幫佩奇找家的思路】
看著佩奇找不到家,它開始急得哭了,我們不能著急啊。好吧,我們理一下思路。我們分三步幫佩奇找家吧:
定位樓層先問問佩奇:「你家在第幾層樓呢?」
佩奇說到:「我記得好像是要上樓梯,不用坐電梯的,好像上得樓梯也不是很多……嗯嗯,對了,好像是在二層……」
好吧,我們終於定位了,這隻佩奇好像是二層的佩奇小豬。
定位它在幾單元這時候我們到樓下看到有好多單元,佩奇也急得快要哭了。這時候,小羊蘇西蹦蹦跳跳過來了,它好像認識這隻佩奇,興奮的跟佩奇打招呼。它告訴我們,這隻佩奇是1單元住的。於是,我們領著佩奇走到1單元2層……
定位在哪個房間好吧,我們終於到了1單元2層,但是這層有好多的住戶,佩奇也記不得到底是哪間房了,它急得大哭起來。這時候,豬媽媽聽到哭聲,打開門……
佩奇終於到家了……
原來這隻佩奇家住1單元2層203室……
【程序設計的角度定位佩奇家】
我們終於幫這隻佩奇找到了自己的家,現在,我們對這隻佩奇進行定位(2,1,03),相信大家都能夠看懂了,我們定義了一種數據結構,第一個數代表2層,第二個數代表1單元,第三個數代表03室。這在Python中來說就是一個元組類型,如果我們想存儲更多的信息呢?好吧,如這樣:佩奇A家:(2,1,03),相信學過Python的人肯定會知道,用字典存儲比較好了{'佩奇A家':(2,1,03), ……},它還能存儲好多的其它佩奇家的信息,是不是很爽?
但是問題來了,如果佩奇王國裡面都住著無數的小豬佩奇,我們怎麼才能精確的定位某一個佩奇呢?字典的容量夠不夠?有沒有更好的數據結構呢?
不用找了,我們使用Python的numpy庫中的ndarray對象,這是個不錯的選擇。
【ndarray維度的理解】
通過之前的分析,我們知道當數據量巨大時,ndarray數組操作數據的效率肯定遠遠大於我們Python中的字典。
我們使用numpy創建一個三維數組(ndarray對象)
import numpy as np
a = np.arange(24).reshape(2, 3, 4)
我們定義的數組a結果如下。
array([[[ 0, 1, 2, 3],[ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]])
我們可以這樣理解這組數據,array中兩個列表代表樓房的層高,然后里面有3個單元,每個單元有4戶人家,這樣,我們就能很好的理解這個維度,當維度增加1時,我們可以將視野擴展到整個小區,這棟樓是小區裡面的幾棟樓?當維度再增加1時,我們就將視野擴展到整個城市區域,增加的這個維度理解為城市中的某個小區……依次類推,我們以定義的這個三維數組開始理解。具體參照我使用jupyter notebook做的筆記內容。如下圖所示。
怎麼樣?這樣理解是不是就好一點,比單純的看到好多數據更加形象化了?大家對於ndarray對象有沒更好的理解思路呢?歡迎大家留言討論,感興趣的關注我,後續會持續更新有關numpy的學習過程。
轉載請註明出處(百家號:Python高手養成)