python——numpy庫


 

numpy庫

英文官方文檔:https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html

一、numpy庫中的數組對象
二、numpy庫數據存取與文件
三、numpy庫的隨機函數
四、numpy的統計函數
五、梯度函數

一、numpy庫中的數組對象:N維數組類型:ndarray

  1)      ndarray的作用:

    a)      數組對象性可以去掉元素間運算所需的循環,使一維向量更像單個數據。

    b)     設置專門的數組對象,經過優化,可以提升這類應用的運算速度。

  2)      ndarray是一個多維數組對象,有兩部分組成:

      實際的數據 和 描述這些數據的元數據(數據維度、數據類型等)

                 ndarray數組一般要求所有元素類型相同(同質),數組下標從零開始

  3)      ndarray實例對象的屬性:

    .ndim:秩,即軸的數量或維度的數量

    .shape:ndarray對象的尺度,對於矩陣,n行m列

    .size:ndarray對象元素的個數,相當於.shape中的n*m

    .dtype:ndarray對象的元素類型

    .itemsize:ndarray對象中的每個元素的大小,以字節為單位

  4)        ndarray的元素類型:

數據類型

說明

bool

布爾類型,True or False

intc

與C語言中的int類型一致Int32或int6

intp

用於索引的整數,與C語言中的ssize_t一致,int2或int64

int8

8字節長度的整數,取值[-128,127]

int16/int32/int64

類似int8

uint8

8位無符正數,取值[0,255]

uint16/uint32/uint64

類似uint8

float16

16位半精度浮點數:1位符號位,5位指數(10^指數),10位尾數

float32

類似float16;1為符號位,8位指數,23位尾數

float64

類似float16;1為符號位,11位指數,52位尾數

complex64

復數類型,實部和虛部都是32位浮點數

complex128

復數類型,實部和虛部都是64位浮點數

       對比:python語法只支持整數,浮點數和復數3種類型

                而科學計算對數據的類型,精度都有較高要求

       注意:非同質的ndarray無法有效發揮numpy優勢,盡量避免使用

 

 

  5)      ndarray數組的創建方法:

    a)      從python中的列表、元組等類型創建ndarray數組

      x=numpy.array(list/tuple)     

      x=numpy.array(list/tuple, dtype=np.int64)

      不指定dtype,numpy將根據數據情況關聯一個dtype

    b)     使用numpy中函數創建ndarray數組,如:arange,ones,zeros等

函數

說明

numpy.arange(n)

類似range()函數,返回ndarray類型,元素從0到n-1

numpy.ones(shape)

根據shape生成一個全一數組,shape是元組類型

numpy.zeros(shape)

根據shape生成一個全零數組,shape是元組類型

numpy.full(shape,val)

根據shape生成一個數組,每個元素值都是val

numpy.eye(n)

生成n階單位陣

numpy.ones_like(a)

根據數組a的形狀生成一個全1數組

numpy.zeros_like(a)

根據數組a的形狀生成一個全0數組

numpy.full_like(a,val)

根據數組a的形狀生成一個數組,每個元素值都是val

numpy.linspace()

根據起止數據等間距地填充數據,形成數組

numpy.concatenate()

將兩個或多個數組合並成一個新的數組

 

    c)      從字節流(raw bytes )中創建ndarray數組

    d)     從文件中讀取特定格式,創建ndarray數組

 

 

  6)ndarray數組的變換

    a)  ndarray數組的維度變換(例如x=numpy.eye(n))

函數

說明

x.reshape(shape)

不改變數組元素,返回一個shape形狀的數組,原數組不變

x.resize(shape)

與.reshape()功能一致,但修改原數組

x.swapaxes(ax1,ax2)

將數組n個維度中的兩個維度進行調換

x.flatten()

對數組進行降維,返回折疊后的一維數組,原數組不變

 

    b)     ndarray數組的其他變換

函數

說明

x.astype(new_type)

類型變換:創建一個新數組(原始數據的一個拷貝)即使兩個數據類型一致

x.tolist()

向列表變換

 

 

  7)ndarray數組的操作:
              數組的索引:獲取數組中特定元素。例如

            

            數組的切片:獲取數組元素子集的過程。

              a)  一維數組的索引和切片:與python的列表類似

              b)多維數組的索引:

    每個維度的索引值用逗號分隔,選取一個維度用 :(冒號),每個維度切片方法與一維數組相同。

    例如:

         

 

  8)ndarray數組的運算:

    數組與標量之間的運算:

              數組與標量之間的運算作用於數組的每一個元素

         numpy的一元函數:

函數

說明

numpy.abs(x)/.fabs(x)

計算數組中各元素的絕對值

numpy.sqrt()

計算數組中各元素的平方根

numpy.square(x)

計算數組中各元素的平方

numpy.log(x)/.log10(x)/log2(x)

計算數組各元素自然對數、10底對數、2底對數

numpy.ceil(x)/.floor(x)

計算數組各元素的ceilling值或floor的值

numpy.rint(x)

計算數組各元素的四舍五入值

numpy.modf(x)

將數組各元素的小數和整數部分以兩個獨立數組形式返回

numpy.cos(x)/.cosh(x)

numpy.sin(x)/.sinh(x)

numpy.tan(x)/.tanh(x)

計算數組各元素的普通型和雙曲型三角函數

numpy.sign(x)

計算數組各元素的符號值

numpy.exp(x)

計算數組各元素的指數值

      

    numpy的二元函數:

函數

說明

+  -  *  /  **

兩數組各元素進行對應運算

numpy.maximum(x)/.fmax(x)

numpy.minimum(x)/.fmin()

元素級的最值

numpy.mod(x,y)

元素級的模運算

numpy.copysign(x,y)

將數組y中各元素的符號賦值給數組x對應元素

 >  <  >=  ==  !=

算術比較運算符,產生布爾類型

 

二、numpy庫數據存取與文件

  1、 數據的csv文件存取:

    a)       csv文件:Comma-Separated Value 逗號分隔值。CSV文件是一種常見的文件格式,用於存儲批量數據

    b)       numpy庫向文件寫入csv格式並從csv文件讀取數據。

      i.            向文件寫入csv的函數

          numpy.savetxt(frame,array,fmt=’%.18e’, delimiter=None):

          功能:該函數可以生成帶有特定分隔字符串的文件。

          參數解釋:

          frame:文件、字符或生產器,可以是.gz或.bz2的壓縮文件。(即文件路徑)

          array:要存入文件的數組。

          fmt (format):寫入文件中每一個元素(整型,浮點型等保存在文件中所對應

                字符串的格式)使用的格式。例如:%d,%2.f,%.18e。

                默認%.18e(科學計數法保留18位小數),這個參數常要修改。

                           delimiter:分隔字符串,默認是空格。其表示寫入到數據文件中,數據之間

               的分隔字符串。CSV文件分隔串為 ‘,’ ,即delimiter=’,’  。

      ii.        讀入csv格式文件的函數

                       x=numpy.loadtxt(frame,dtype=numpy.float,delimiter=None,unpack=False)

                       參數解釋:

                         frame:文件、字符串或產生器,可以是.gz或.bz2的壓縮文件。

                         dtype:數據類型,可選,將csv文件每個元素字符串變成特定格式。

                                      默認float類型。

                         unpack:False表示讀入的數據寫入一個數組,True表示讀入屬性將分別寫

            入不用變量。

                         delimiter:分割字符串,默認是任何空格。

    c)        CSV文件的局限性:CSV文件只能有效存儲一維和二維數組,即上述函數只能有效存取和讀取一維和二維數組。

  2、 任意維度數據的存取:

    a)       對於ndarray數組a,可以使用a.tofile(frame, sep=’’ , format=‘%s’)

      參數解釋:

         frame:文件或字符串的名字。

         sep:數據分割字符串,如果是空串,寫入文件為二進制(占用空間更少)。

         format:寫入數據的格式。例如:%d  。

      注意:文件將不會包含維度信息,而是將每個維度元素按列寫入csv文件。

    b)       從文件還原數據:

      X=numpy.fromfile(frame,dtype=float,count=-1,sep=’’)

      參數解釋:

        frame:文件、字符串的名字。

        dtype:讀取數據的類型。

        count:讀入元素個數,默認-1表示讀入整個文件。

        sep:表示數據分割字符串,如果是空串,寫入文件為二進制。    

      注意:讀入后的ndarray數組對象a,通過a.reshape()函數還原維度信息。只有預

        先知道文件的維度以及元素類型才能有效還原數據。即a.tofile()與a.fromfile()

        需要配合使用。

        可以通過元數據文件來存儲額外信息(比較繁瑣)。

    c)        numpy的便捷文件存取:

       i.            numpy.save(fname,array)或numpy.savez(fname,array)   //存文件

        參數解釋:

               frame:文件名,已.npy為拓展名,壓縮拓展名為.npz。

                  array:要存儲的數組變量。

      ii.            numpy.load(fname)       //還原文件

        參數解釋:

            frame:文件名,以.npy為拓展名,壓縮拓展名為.pyz

 

三、numpy庫的隨機函數

  numpy的random子庫 ( 調用的時候直接numpy.functionName() ):

      

函數

說明

第一類

rand(d0,d1,…,dn)

根據d0-dn創建隨機數數組,浮點數,[0,1),均勻分布

randn(d0,…,dn)

根據d0-dn創建隨機數數組,標准正態分布

randint( low[ , high,shape] )

根據shape創建隨機整數或整數數組,范圍是[ low,high ]

seed(s)

隨機數種子,s是給定的種子數

第二類

shuffle(a)

根據數組a的第1軸進行隨機排列,改變原數組a

permutation(a)

根據數組a的第1軸產生一個新的亂序數組,不改變原數組a

choice(a[,size,replace,p] )

從一維數組a中以概率p抽取元素,形成size形狀新數組,replace表示每次抽取是否可以重用元素,默認為False

第三類

uniform(low,high,size)

產生具有均勻分布的數組,low是啟始值,high是結束值,size形狀

normal(loc,scale,size)

產生具有正態分布的數組,loc是均值,scale是標准差,size是形狀

poisson(lam,size)

產生具有泊松分布的數組,lam是隨機事件發生概率,size是形狀

 

四、numpy的統計函數

   統計函數:統計數組中的信息進行統計運算。

   numpy直接提供的統計類函數 通過numpy.functionName()調用:

函數

說明

sum(a,axis=None)

根據給定軸axis計算數組a相關元素之和,axis整數或元組

mean(a,axis=None)

根據給定軸axis計算數組a相關元素的期望,axis為整數或元組

average(a,axis=None,weights=None)

根據給定軸axis計算數組a的加權平均值

std(a,axis=None)

根據給定軸axis計算數組a的標准差

var(a, axis=None)

根據給定軸axis計算數組a相關元素方差

min(a)       max(a)

計算數組a中元素的最小值、最大值

argmin(a)   argmax(a)

計算數組a中元素最小值、最大值的降一維后下標

unravel_index(index,shape)

根據shape將一堆下標index轉換成多維下標

ptp(a)

計算數組a中元素最大值與最小值之差

median(a)

計算數組a中元素的中位數(中值)

 

五、梯度函數

  梯度:連續值之間的變化率,即斜率。

    numpy.random的梯度函數只有一個:
    numpy.gradient( f ):計算數組中元素的梯度,當t為多維時,返回每個維度梯度

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM