如何把小豬佩奇放到多維空間裡(深入理解numpy中的ndarray對象)

2021-01-11 python高手養成

在使用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高手養成)

相關焦點

  • Python數據分析類庫系列-Numpy之多維數組ndarray
    -- ndarray NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。第二個例子中,每個元素都與自身相加。 筆記:在本章及全書中,我會使用標準的NumPy慣用法import numpy as np。你當然也可以在代碼中使用from numpy import *,但不建議這麼做。numpy的命名空間很大,包含許多函數,其中一些的名字與Python的內置函數重名(比如min和max)。
  • Python數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    NumPy的主要對象是同構數據多維容器(homogeneous multidimensional array)——ndarray,也就是說每一個ndarray都是一個相同類型元素組成的表格(二維)。在NumPy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。軸這個概念必須牢記,否則放棄吧。首先軸是從0開始計的,0代表最高維,次高維是1,以此類推。
  • Numpy的ndarray:一種多維數組對象
    前言Numpy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。可以利用這種數組對整塊數據執行一些數學運算。模塊導入方式如下:import numpy as npndarray是一個通用的同構數據多維容器,也就是說,其中的所有元素必須是相同類型的。
  • NumPy ndarray數組的創建
    NumPy 封裝了一個新的數據類型 ndarray(N-dimensional Array),它是一個多維數組對象。該對象封裝了許多常用的數學運算函數,方便我們做數據處理、數據分析等。那麼,如何生成 ndarray 呢?
  • NumPy中的ndarray與Pandas的Series和DataFrame之間的區別與轉換
    在數據分析中,經常涉及numpy中的ndarray對象與pandas的Series和DataFrame對象之間的轉換,讓一些開發者產生了困惑。本文將簡單介紹這三種數據類型,並以金融市場數據為例,給出相關對象之間轉換的具體示例。
  • numpy庫學習總結(基礎知識)
    安裝成功後,我們在Python編譯器中進行測試,使用import numpy,如果不報錯,說明我們的numpy安裝無誤了。【numpy庫基本使用】Numpy中定義的最重要使用最頻繁的對象就是ndarray的N維數組類型。它描述相同類型(dtype)的元素集合,可以使用基於零的索引訪問集合中的項目,它的類似Python中的列表索引。
  • NumPy ndarray數組元素的獲取
    生成 ndarray 數組後,如何讀取我們所需要的數據呢?
  • D01 Numpy簡介,為什麼Numpy那麼快
    title: D01|Numpy簡介author: Adolph Leecategories: 數據挖掘基礎tags:Python數據挖掘基礎Numpy初識NumpyNumpy是一個Python基礎科學計算包,它的核心是多維數組ndarray對象,Numpy
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能
  • D02 Numpy常用函數,如何優雅的遍歷一個多維數組?
    title: D02|Numpy常用函數author: Adolph Leecategories: 數據挖掘基礎tags:Python數據挖掘基礎Numpy如何遍歷一個數組,使用嵌套for循環嗎?當我們想要遍歷一個多維數組的時候,如果通過不停的使用循環去遍歷,這會讓我們的代碼可讀性與性能都變得很差,numpy提供了一個函數nditer,以幫助我們遍歷數組。nditer的入參是一個數組,返回值是一個可迭代對象。nditer 默認會優先遍歷行序,通過order參數可以使其優先遍歷列序。
  • Python中NumPy簡介及使用舉例
    支持多維數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。NumPy提供了與Matlab相似的功能與操作方式,因為兩者皆為直譯語言。NumPy中定義的最重要的對象是稱為ndarray的N維數組類型。它描述相同類型的元素集合,可以使用基於零的索引訪問集合中元素。基本的ndarray是使用NumPy中的數組函數創建的: numpy.array。NumPy支持比Python更多種類的數值類型。NumPy數值是dtype(數據類型)對象的實例,每個對象具有唯一的特徵。
  • Python NumPy用法介紹
    NumPy的部分功能如下:ndarray,一個具有矢量算術運算和複雜廣播能力的快速且節省空間的多維數組。用於對整組數據進行快速運算的標準數學函數(無需編寫循環)。用於讀寫磁碟數據的工具以及用於操作內存映射文件的工具。用於集成由C、C++、Fortran等語言編寫的代碼的A C API。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    NumPy 是 Python 科學計算的基礎軟體包,提供多維數組對象,多種派生對象(掩碼數組、矩陣等)以及用於快速操作數組的函數及 API,它包括數學、邏輯、數組形狀變換、排序、選擇、I/O 、離散傅立葉變換、基本線性代數、基本統計運算、隨機模擬等等。
  • NumPy的數組對象
    NumPy的主要操作對象是同類型的多維數組,數組中的所有元素類型都是相同的,數組對象名是ndarray,別名是array。一、創建數組可以有多種方式創建NumPy數組:(1)使用NumPy的array函數從Python列表中創建數組,數組類型由列表中的數據類型確定;(2)使用NumPy的zeros函數創建數組元素全部為0的數組,默認情況下數組元素的類型為float64;(3)使用NumPy的ones函數創建數組元素全部為1的數組,默認情況下數組元素的類型為float64;(4)使用NumPy
  • Python中的Numpy基礎20問
    import numpy as np# 創建一維數組x1 = np.array([1,2,3,4])# 切片,取前三個元素x1[:3]'''輸出:array([1, 2, 3])'''重點是對多維數組的索引和切片。多維數組有多個軸,那麼就需要對每個軸進行索引。例如,三維數組形狀為(x,y,z),分別代表:0軸有x個元素、1軸有y個元素,2軸有z個元素。
  • NumPy基礎教程,帶你玩轉多維數組
    NumPy 的數組類(array class)叫做 ndarray,同時我們也常稱其為數組(array)。注意 numpy.array 和標準 Python 庫中的類 array.array 是不同的。標準 Python 庫中的類 array.array 只處理一維的數組,提供少量的功能。
  • Numpy基礎:創建ndarray及數據類型
    一起學習,一起成長1.創建ndarray創建數組最簡單的辦法就是使用array函數。它接受一切序列型的對象(包括其他數組),然後產生一個新的含有傳入數據的Numpy數組。數據類型保存在一個特殊的dtype對象中。其他一些可以新建數組的函數。比如zeros和ones分別可以創建指定長度或形狀的全0或全1數組。empty可以創建一個沒有任何具體值的數組。np.zeros(10)np.ones((3,6))np.empty((2,3,2))arange是python內置函數range的數組版。
  • 如果不懂Numpy,請別說自己是Python程式設計師
    1. list VS ndarraynumpy 的核心是 ndarray 對象(numpy 數組),它封裝了 python 原生的同數據類型的 n 維數組(python 數組)。numpy 數組的方法涵蓋了大量數學運算和複雜操作,許多方法在最外層的 numpy 命名空間中都有對應的映射函數。和 python 數組相比,numpy 數組的方法功能更強大,執行效率更高,代碼更簡潔。
  • NumPy簡潔教程
    NumPy是Python數值庫,是Python編程中最有用的科學庫之一。它支持大型多維數組對象和各種工具。各種其他的庫,如Pandas、Matplotlib和Scikit-learn,都建立在這個令人驚嘆的庫之上。數組是元素/值的集合,可以有一個或多個維度。一維數組稱為向量,二維數組稱為矩陣。
  • Python:一篇文章掌握Numpy的基本用法
    科學計算庫的基礎庫,許多其他著名的科學計算庫如Pandas,Scikit-learn等都要用到Numpy庫的一些功能。本文主要內容如下:Numpy數組對象創建ndarray數組Numpy的數值類型ndarray數組的屬性ndarray數組的切片和索引處理數組形狀數組的類型轉換numpy常用統計函數數組的廣播1 Numpy數組對象Numpy中的多維數組稱為ndarray