NumPy ndarray數組的創建

2021-03-02 平臺開發

NumPy 是 Python 的外部庫,不在標準庫中,若要使用它,需要先導入 NumPy:

import numpy as np

導入 NumPy 庫後,可通過np.+Tab鍵查看可使用的函數,如果對其中一些函數的使用不是很清楚,還可以在對應函數加上?,再運行,就可以很方便地看到如何使用函數的幫助信息。

輸入np.然後按 Tab 鍵,將出現如下界面:


圖1:查看 NumPy 可以使用的函數


運行如下命令,便可查看函數 abs 的詳細幫助信息。

np.abs?

NumPy 不但強大,而且還非常友好。下面將介紹Numpy的一些常用方法,尤其是與機器學習、深度學習相關的一些內容。

NumPy 封裝了一個新的數據類型 ndarray(N-dimensional Array),它是一個多維數組對象。該對象封裝了許多常用的數學運算函數,方便我們做數據處理、數據分析等。那麼,如何生成 ndarray 呢?這裡介紹生成 ndarray 的幾種方式,包括:

從已有數據中創建數組

直接對 Python 的基礎數據類型(如列表、元組等)進行轉換來生成 ndarray:

1) 將列錶轉換成 ndarray:

import numpy as npls1 = [10, 42, 0, -17, 30]nd1 =np.array(ls1)print(nd1)print(type(nd1))

運行結果:

[ 10  42   0 -17  30]
<class 'numpy.ndarray'>


2) 嵌套列表可以轉換成多維 ndarray:

import numpy as npls2 = [[8, -2, 0, 34, 7], [6, 7, 8, 9, 10]]nd2 =np.array(ls2)print(nd2)print(type(nd2))

運行結果:

[[ 8 -2  0 34  7]
[ 6  7  8  9 10]]
<class 'numpy.ndarray'>


對於上面兩個例子,也可以把列表換成元組,同樣也適用。

利用 random 模塊生成數組

在深度學習中,我們經常需要對一些參數進行初始化,因此為了更有效地訓練模型,提高模型的性能,有些初始化還需要滿足一定的條件,如滿足正態分布或均勻分布等。這裡介紹了幾種 np.random 模塊中常用的方法,如下表所示。

表1:np.random 模塊常用函數函數描述np.random.random生成0到1之間的隨機數np.random.uniform生成均勻分布的隨機數np.random.randn生成標準正態的隨機數np.random.randint生成隨機的整數np.random.normal生成正態分布np.random.shuffle隨機打亂順序np.random.seed設置隨機數種子random_sample生成隨機的浮點數


下面來看一些函數的具體使用:


import numpy as np

nd3 =np.random.random([4, 3]) #生成4行3列的數組

print(nd3)

print("nd3的形狀為:",nd3.shape)

運行結果:

[[0.59115057 0.52022516 0.05992361]
 [0.5077815  0.81313999 0.70061259]
 [0.24654561 0.11705634 0.71399966]
 [0.73964407 0.57138345 0.89284498]]
nd3的形狀為:(4, 3)


為了每次生成同一份數據,可以指定一個隨機種子,使用 shuffle() 函數打亂生成的隨機數。

import numpy as npnp.random.seed(123)nd4 = np.random.randn(4, 3)print(nd4)np.random.shuffle(nd4)print("隨機打亂後數據:")print(nd4)print(type(nd4))

運行結果:

[[-1.0856306   0.99734545  0.2829785 ]
 [-1.50629471 -0.57860025  1.65143654]
 [-2.42667924 -0.42891263  1.26593626]
 [-0.8667404  -0.67888615 -0.09470897]]
隨機打亂後數據:
[[-1.50629471 -0.57860025  1.65143654]
 [-2.42667924 -0.42891263  1.26593626]
 [-0.8667404  -0.67888615 -0.09470897]
 [-1.0856306   0.99734545  0.2829785 ]]
<class 'numpy.ndarray'>

創建特定形狀的多維數組

參數初始化時,有時需要生成一些特殊矩陣,如全是 0 或 1 的數組或矩陣,這時我們可以利用 np.zeros、np.ones、np.diag 來實現,如下表所示。

表2:NumPy 自帶的數組創建函數函數描述np.zeros((3, 4))創建 3×4 的元素全為 0 的數組np.ones((3, 4))創建 3×4 的元素全為 1 的數組np.empty((2, 3))創建 2×3 的空數組,空數據中的值並不為 0,而是未初始化的垃圾值np.zeros_like(ndarr)以 ndarr 相同維度創建元素全為  0數組np.ones_like(ndarr)以 ndarr 相同維度創建元素全為 1 數組np.empty_like(ndarr)以 ndarr 相同維度創建空數組np.eye(5)該函數用於創建一個 5×5 的矩陣,對角線為 1,其餘為 0np.full((3,5), 10)創建 3×5 的元素全為 10 的數組,10 為指定值


下面通過幾個示例說明:

import numpy as npnd5 =np.zeros([3, 3])nd6 = np.ones([3, 3])nd7 = np.eye(4)nd8 = np.diag([1, 8, 3, 10])print("nd5 =\n", nd5)print("nd6 =\n", nd6)print("nd7 =\n", nd7)print("nd8 =\n", nd8)

運行結果:

nd5 =
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
nd6 =
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
nd7 =
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
nd8 =
[[ 1  0  0  0]
[ 0  8  0  0]
[ 0  0  3  0]
[ 0  0  0 10]]


有時還可能需要把生成的數據暫時保存到文件中,以備後續使用。

import numpy as npnd9 =np.random.random([3, 5])np.savetxt(X=nd9, fname='./data.txt')nd10 = np.loadtxt('./data.txt')print(nd10)

運行結果:

[[0.1744383  0.15515217 0.74885812 0.57633094 0.06300636]
[0.24340527 0.65213913 0.07284238 0.52232677 0.58538849]
[0.83611286 0.76508018 0.26018483 0.20485587 0.95476232]]

打開當前目錄下的 data.txt 也可以看到格式化的數據。

利用 arange() 和 linspace() 函數生成數組

arange() 是 numpy 模塊中的函數,其格式為:

arange([start,] stop[,step,], dtype=None)

其中,start 與 stop 用來指定範圍,step 用來設定步長。在生成一個 ndarray 時,start 默認為0,步長 step 可為小數。Python 有個內置函數 range,其功能與此類似。

請看下面的代碼:

import numpy as npprint(np.arange(10))print(np.arange(0, 10))print(np.arange(1, 4, 0.5))print(np.arange(9, -1, -1))

運行結果:

[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
[1.  1.5 2.  2.5 3.  3.5]
[9 8 7 6 5 4 3 2 1 0]


linspace() 也是 numpy 模塊中常用的函數,其格式為:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

linspace() 可以根據輸入的指定數據範圍以及等份數量,自動生成一個線性等分向量,其中 endpoint(包含終點)默認為 True,等分數量 num 默認為 50。如果將 retstep 設置為True,則會返回一個帶步長的 ndarray。

請看下面的代碼:

import numpy as npprint(np.linspace(0, 1, 10))

運行結果:

[0.         0.11111111 0.22222222 0.33333333 0.44444444 0.55555556
0.66666667 0.77777778 0.88888889 1.        ]

值得一提的是,這裡並沒有像我們預期的那樣,生成 0.1,0.2,...,1.0 這樣步長為 0.1 的 ndarray,這是因為 linspace 必定會包含數據起點和終點,那麼其步長則為 (1-0)/9=0.11111111。如果需要產生 0.1,0.2,...,1.0 這樣的數據,只需要將數據起點 0 修改為 0.1 即可。

除了上面介紹到的 arange() 和 linspace(),NumPy 還提供了 logspace() 函數,該函數的使用方法與 linspace() 的使用方法一樣,讀者不妨自己動手試一下。

相關焦點

  • NumPy ndarray合併數組
    表1:Num:Py ndarray 數組合併方法函數描述np. append()內存佔用大np.concatenate()沒有內存問題np. stack()沿著新的軸加入一系列數組np.hstack()堆棧數組垂直順序(行)np.vstack()堆棧數組垂直順序(列)np.dstack()堆棧數組按順序深入(沿第3維)np.vsplit()將數組分解成垂直的多個子數組的列表
  • NumPy ndarray數組元素的獲取
    生成 ndarray 數組後,如何讀取我們所需要的數據呢?
  • Numpy 修煉之道 (2)—— N維數組 ndarray
    從ndarray對象提取的任何元素(通過切片)由一個數組標量類型的 Python 對象表示。 下圖顯示了ndarray,數據類型對象(dtype)和數組標量類型之間的關係。構建ndarray打開 Python 終端>>> import numpy as np>>> a = np.array([0, 1, 2, 3]) # 1-D>>> aarray([0, 1, 2, 3])>>> b = np.array
  • 第 81 天:NumPy Ndarray 對象及數據類型
    2、ndarray 的內部結構ndarray 內部結構3、創建 ndarrayfrom numpy import *eye(4)Out[3]: array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]])
  • NumPy數組的屬性和常用創建方法
    2、ndarray屬性通過一個例子來看下numpy ndarray的屬性:#juzicode.com,VX:桔子codeimport numpy as npa = np.arange(6).reshape(2,3)print('a=\n',a)print('a.ndim=',a.ndim) #
  • Python數據分析之Numpy學習 2——NumPy 基礎 ndarray對象
    約定:import numpy as npndarray對象的常用屬性創建ndarray函數說明np.array(data,dtype=None, order=None)將數據data(列表、元組、數組或其他序列類型)轉換為ndarray。
  • Numpy基礎-認識ndarray
    創建ndarray創建數組最簡單的方法是使用array函數,它接受一切序列型的對象(甚至包括其它數組),然後產生一個新的含有傳入數據的Numpy數組。dtype,但是當創建完成後都有這個參數,這是因為如果在創建時沒有顯式的聲明dtype,那麼Numpy會自動為這個數組推斷出一個較為合適的數據類型。
  • numpy中的ndarray
    軟硬體環境簡介numpy是python中的一個數值計算的開源庫,主要用來存儲和處理多維數組,核心數據結構是ndarray。本文分享ndarray的基本使用, 首先需要安裝numpypip install numpy二維ndarray要構造二維數組(就是矩陣),需要知道數組的行數、列數和每個元素的數據類型,在numpy中,常見的有uint8、int32、float32、float64等等
  • Numpy基礎:創建ndarray及數據類型
    一起學習,一起成長1.創建ndarray創建數組最簡單的辦法就是使用array函數。它接受一切序列型的對象(包括其他數組),然後產生一個新的含有傳入數據的Numpy數組。np.array會嘗試為新建的這個數組推斷出一個較為合適的數據類型。數據類型保存在一個特殊的dtype對象中。其他一些可以新建數組的函數。比如zeros和ones分別可以創建指定長度或形狀的全0或全1數組。empty可以創建一個沒有任何具體值的數組。
  • Python Numpy 數組的基本操作示例
    Numpy中的數組是一個元素表(通常是數字),所有元素都是相同的類型,由一個正整數元組索引。在Numpy中,數組的維數稱為數組的秩。一個整數的元組給出了數組在每個維度上的大小,稱為數組的形狀。Numpy中的數組類稱為ndarray。Numpy數組中的元素可以使用方括號訪問,也可以使用嵌套Python列表初始化。Numpy中的數組可以通過多種方式創建,具有不同數量的秩,定義數組的大小。
  • NumPy中的ndarray與Pandas的Series和DataFrame之間的區別與轉換
    在數據分析中,經常涉及numpy中的ndarray對象與pandas的Series和DataFrame對象之間的轉換,讓一些開發者產生了困惑。本文將簡單介紹這三種數據類型,並以金融市場數據為例,給出相關對象之間轉換的具體示例。
  • 數據分析入門 | numpy基礎:數組和矢量計算
    Ndarray中包含了一個shape(一個表示各維度大小的元組)和一個dtype(一個用於說明數組數據類型的對象)。      因此,我們可以創建和訪問一個ndarray對象其含有的數組以及它的相關屬性如數組維度、大小、數據類型等等。
  • Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • 如何把小豬佩奇放到多維空間裡(深入理解numpy中的ndarray對象)
    在使用numpy對ndarray對象進行處理時,我們動輒就會碰到大於二維的數據。這時候,很多小朋友肯定會犯難,如何理解這些數據?怎麼才能在腦海裡把這些數據跟我們的現實生活聯繫起來進行理解呢?今天,我帶大家通過一個實例來深入理解一下這個數據結構。
  • Python乾貨 | Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • NumPy的數組對象
    NumPy的主要操作對象是同類型的多維數組,數組中的所有元素類型都是相同的,數組對象名是ndarray,別名是array。一、創建數組可以有多種方式創建NumPy數組:(1)使用NumPy的array函數從Python列表中創建數組,數組類型由列表中的數據類型確定;(2)使用NumPy的zeros函數創建數組元素全部為0的數組,默認情況下數組元素的類型為float64;(3)使用NumPy的ones函數創建數組元素全部為
  • Python之numpy數組學習(一)
    Numpy中的多維數組稱為ndarray,它有兩個組成部分。在數組的處理過程中,原始數據不受影響,變化的只是元數據。Numpy數組通常是由相同種類的元素組成,即數組中數據類型必須一致。好處是:數組元素類型相同,可輕鬆確定存儲數組所需的空間大小。同時,numpy可運用向量化運算來處理整個數組。Numpy數組的索引從0開始。
  • Python數據分析 | 第四章 Numpy 基礎之ndarray
    雖然大多數數據分析工作不需要深入理解NumPy,但是精通面向數組的編程和思維方式是成為Python科學計算牛人的一大關鍵步驟。❝筆記:當你在本書中看到「數組」、「NumPy數組」、"ndarray"時,基本上都指的是同一樣東西,即ndarray對象。❞4.1.1 創建ndarray創建數組最簡單的辦法就是使用array函數。
  • numpy庫學習總結(基礎知識)
    安裝成功後,我們在Python編譯器中進行測試,使用import numpy,如果不報錯,說明我們的numpy安裝無誤了。【numpy庫基本使用】Numpy中定義的最重要使用最頻繁的對象就是ndarray的N維數組類型。
  • python數據分析專題 (9):numpy基礎
    NumPy最重要的一個特點就是其N維數組對象(即ndarray),該對象是一個快速而靈活的大數據集容器。新手可能不理解這句話的含義,這個需要慢慢去理解 。總之,知道numpy是python數據分析最重要的基礎包就可以了。有了numpy才可以利用這種數組對整塊數據執行一些數學運算,比python自帶的數組以及元組效率更高,其語法跟變量元素之間的運算一樣,無需進行循環操作。