numpy中的ndarray

2021-03-02 迷途小書童的Note
軟硬體環境簡介

numpy是python中的一個數值計算的開源庫,主要用來存儲和處理多維數組,核心數據結構是ndarray。本文分享ndarray的基本使用, 首先需要安裝numpy

pip install numpy

二維ndarray

要構造二維數組(就是矩陣),需要知道數組的行數、列數和每個元素的數據類型,在numpy中,常見的有uint8、int32、float32、float64等等

下面構造一個2行3列全是0的uint8類型的二維數組

(base) xugaoxiang@1070Ti:~$ ipython
Python 3.7.6 (default, Jan  8 2020, 19:59:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np

In [2]: np.zeros((2, 3), np.uint8)
Out[2]:
array([[0, 0, 0],
       [0, 0, 0]], dtype=uint8)

In [3]:

如果想構造全是1的數組,可以使用np.ones()方法

In [5]: np.ones((2, 3), np.uint8)
Out[5]:
array([[1, 1, 1],
       [1, 1, 1]], dtype=uint8)

使用常量數據進行初始化

In [8]: np.array([[1, 2, 3], [4, 5, 6]], np.float64)
Out[8]:
array([[1., 2., 3.],
       [4., 5., 6.]])

三維ndarray

三維數組可以理解為每一個元素都是一個二維數組。比如一個2x2x3的uint8三維數組,就是2個2x3的二維數組

In [11]: np.array([[[1, 2, 3], [4, 5, 6]], [[9, 8, 7], [6, 5, 4]]], np.uint8)
Out[11]:
array([[[1, 2, 3],
        [4, 5, 6]],

       [[9, 8, 7],
        [6, 5, 4]]], dtype=uint8)

In [12]:

了解了這個原理後,以此類推,更高維的數組就很好理解了

ndarray的常用屬性及元素值獲取

shape屬性可以獲取到尺寸,比如

In [12]: t = np.zeros([2, 3], np.uint8)

In [13]: t.shape
Out[13]: (2, 3)

In [14]:

In [14]: t3 = np.array([[[1, 2, 3], [4, 5, 6]], [[9, 8, 7], [6, 5, 4]]],np.uint8
    ...: )

In [15]: t3.shape
Out[15]: (2, 2, 3)

In [16]:

dtype屬性可以獲取到元素的數據類型,如

In [17]: t.dtype
Out[17]: dtype('uint8')

In [18]: t3.dtype
Out[18]: dtype('uint8')

In [19]:

獲取數組中某個元素的值,可以通過索引來獲取,索引從0開始計算,以二維為例

In [20]: t = np.array([[1, 2, 3], [4, 5, 6]], np.uint8)

In [21]: t[1, 1]
Out[21]: 5

In [22]: t[0, 2]
Out[22]: 3

In [23]:

獲取某行數據,以上面的t變量為例,代碼如下

In [36]: t[0,:]
Out[36]: array([1, 2, 3], dtype=uint8)

In [37]: t[1,:]
Out[37]: array([4, 5, 6], dtype=uint8)

# 當索引超出後,會報錯
In [38]: t[2,:]

IndexError                                Traceback (most recent call last)
<ipython-input-38-79ac94a5bef6> in <module>
----> 1 t[2,:]

IndexError: index 2 is out of bounds for axis 0 with size 2

In [39]:

獲取某列數據,以上面的t變量為例,代碼如下

In [40]: t[:,0]
Out[40]: array([1, 4], dtype=uint8)

In [41]: t[:,1]
Out[41]: array([2, 5], dtype=uint8)

In [42]: t[:,2]
Out[42]: array([3, 6], dtype=uint8)

In [43]: t[:,3]

IndexError                                Traceback (most recent call last)
<ipython-input-43-cd95ba35026b> in <module>
----> 1 t[:,3]

IndexError: index 3 is out of bounds for axis 1 with size 3

In [44]:

除此之外,還可以獲取到某一區間,代碼如下

# 這裡的區間操作是左閉右開的,如[0:1],就是從0行開始,但不包括第1行
In [45]: t[0:1,1:3]
Out[45]: array([[2, 3]], dtype=uint8)

In [46]:

相關焦點

  • NumPy ndarray數組的創建
    NumPy 是 Python 的外部庫,不在標準庫中,若要使用它,需要先導入 NumPy:import numpy as
  • 第 81 天:NumPy Ndarray 對象及數據類型
    上一篇文章中我們詳細介紹了 NumPy 的功能及用途,本章節著重介紹 NumPy 一個神奇的對象 Ndarray 以及 NumPy 數據類型,包括兩者的用途,接下來就開啟神奇之旅吧。標準安裝的 Python 中用列表 (list) 保存一組值,它可以用來當作數組使用,不過由於列表的元素可以是任何對象,因此列表中所保存的是對象的指針。
  • NumPy ndarray數組元素的獲取
    生成 ndarray 數組後,如何讀取我們所需要的數據呢?
  • NumPy ndarray合併數組
    在 NumPy 中,合併數組也是最常見的操作之一,下表列舉了常見的用於數組或向量合併的方法。
  • Python數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    NumPy的主要對象是同構數據多維容器(homogeneous multidimensional array)——ndarray,也就是說每一個ndarray都是一個相同類型元素組成的表格(二維)。在NumPy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。軸這個概念必須牢記,否則放棄吧。首先軸是從0開始計的,0代表最高維,次高維是1,以此類推。
  • NumPy中的ndarray與Pandas的Series和DataFrame之間的區別與轉換
    在數據分析中,經常涉及numpy中的ndarray對象與pandas的Series和DataFrame對象之間的轉換,讓一些開發者產生了困惑。本文將簡單介紹這三種數據類型,並以金融市場數據為例,給出相關對象之間轉換的具體示例。
  • 如何把小豬佩奇放到多維空間裡(深入理解numpy中的ndarray對象)
    在使用numpy對ndarray對象進行處理時,我們動輒就會碰到大於二維的數據。這時候,很多小朋友肯定會犯難,如何理解這些數據?怎麼才能在腦海裡把這些數據跟我們的現實生活聯繫起來進行理解呢?今天,我帶大家通過一個實例來深入理解一下這個數據結構。
  • Numpy基礎-認識ndarray
    舉個例子:IN:        import numpy as npIN:        data = np.random.normal(loc=5,size = (3,4))IN:        dataOUT:    array([[5.45630309, 4.96479259, 5.04325018, 4.3818349 ],
  • Numpy 修煉之道 (2)—— N維數組 ndarray
    推薦閱讀時間:5min~6min文章內容:Numpy中的N維數組 ndarrayNumpy 中最重要的一個對象就是 ndarray。ndarray 結構圖ndarray中的每個元素在內存中使用相同大小的塊。
  • Python中NumPy簡介及使用舉例
    NumPy中定義的最重要的對象是稱為ndarray的N維數組類型。它描述相同類型的元素集合,可以使用基於零的索引訪問集合中元素。基本的ndarray是使用NumPy中的數組函數創建的: numpy.array。NumPy支持比Python更多種類的數值類型。NumPy數值是dtype(數據類型)對象的實例,每個對象具有唯一的特徵。
  • Python數據分析 | 第四章 Numpy 基礎之ndarray
    (2, 3)In [14]: dataOut[14]: array([[-0.2047,  0.4789, -0.5194],       [-0.5557,  1.9658,  1.3934]])❝🦐 拓展:numpy 常用函數之 randnrandn 函數位於 numpy.random 中,用於產生隨機數,這個函數的作用就是從標準正態分布中返回一個或多個樣本值
  • 手把手的Numpy教程【一】
    在numpy當中,存儲高維數組的對象叫做ndarray,與之對應的是存儲矩陣的mat。其實這兩者區別不大,mat支持矩陣的運算,ndarray基本上也都支持。我們有這麼一個印象即可,關於mat內容我們會在之後介紹。我們創建除了ndarray之後,關於獲取ndarray基本信息的api大概有下面四個。
  • 數據分析打工人常用NumPy 70個高頻操作(上篇)
    目錄1、numpy導入、查看版本2、numpy創建1維數組3、numpy創建布爾型數組4、取出numpy.ndarray中滿足條件的元素5、用新值替換numpy.ndarray中滿足條件的元素(數組本身已被修改)6、用新值替換numpy.ndarray中滿足條件的元素(數組本身不被修改)7
  • numpy庫學習總結(基礎知識)
    最近在學習Python中OpenCV庫,學習花了很多時間,發現基礎知識很重要,尤其是numpy這個庫,在進行程序開發時,處理大量類似數組這種數據結構時,它的重要性等同於Python中的列表,像前篇我們寫的《使用Python中OpenCV庫創建一幅圖片的RGB通道圖片》中,對於圖片的處理
  • NumPy完整剖析篇
    1)) print(np.arange(10)) 2.ndarray的數據類型dtype(數據類型)是一個特殊的對象,它含有ndarray將一塊內存解釋為特定數據類型所需的信息:import numpy as nparr1 = np.array([1, 2, 3], dtype=
  • 數據分析打工人常用NumPy 70個高頻操作(下篇)
    目錄36、求numpy.ndarray兩列相關係數37、判斷numpy.ndarray中是否有null值38、使用指定值替代numpy.ndarray中的預設值39、計算numpy.ndarray元素頻率40、將numpy.ndarray元素由數值型轉換為分類型41、由numpy.ndarray已知列得到新列
  • 最全的NumPy教程
    NumPy - Ndarray 對象NumPy 中定義的最重要的對象是稱為 ndarray 的 N 維數組類型。它描述相同類型的元素集合。可以使用基於零的索引訪問集合中的項目。ndarray中的每個元素在內存中使用相同大小的塊。 ndarray中的每個元素是數據類型對象的對象(稱為 dtype)。
  • 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的數組版。
  • 學員筆記||Python數據分析之:numpy入門(一)
    numpy最主要的是支持矩陣操作與運算非常高效是numpy的優勢,core為C編寫。提升了python的處理效率numpy是一些與比較流行的機器學習框架的基礎。 名詞解釋:ndarray是numpy的核心數據類型,即(n-dimensional array)多維數組,tensorflow中的tensor(張量),它本質上也多維數組,但這個名字很高大上。因此,理解多維數組對之後的機器學習會有很大幫助。導入import numpy as np
  • python數據分析專題 (9):numpy基礎
    NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。有了numpy才可以利用這種數組對整塊數據執行一些數學運算,比python自帶的數組以及元組效率更高,其語法跟變量元素之間的運算一樣,無需進行循環操作。