日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】Numpy基础:数组和矢量运算

發(fā)布時間:2025/3/21 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Numpy基础:数组和矢量运算 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Numpy基礎(chǔ):數(shù)組和矢量運(yùn)算

目錄:

文章目錄

      • 一 Numpy及其重要性
      • 二 ndarray:一種多維數(shù)組對象
        • 1 創(chuàng)建ndarray
        • 2 ndarray的數(shù)據(jù)類型
        • 3 數(shù)組和標(biāo)量之間的運(yùn)算
        • 4 基本的索引和切片
          • ① 元素索引
          • ② 切片索引
          • ③ 布爾型索引
          • ④ 花式索引
          • ⑤ 數(shù)組轉(zhuǎn)置和軸對換
      • 三 通用函數(shù):快速的元素級數(shù)組函數(shù)
      • 四 利用數(shù)組進(jìn)行數(shù)據(jù)處理
        • 1 將條件邏輯表述為數(shù)組計算
        • 2 數(shù)學(xué)與統(tǒng)計方法
        • 3 用于布爾型數(shù)組的方法
        • 4 排序
        • 5 唯一化及其他的集合邏輯
      • 五 用于數(shù)組的文件輸入輸出
      • 六 線性代數(shù)
      • 七 隨機(jī)數(shù)生成

一 Numpy及其重要性

  • Numpy(Numerical Python)是高性能科學(xué)計算和數(shù)據(jù)分析的基礎(chǔ)包,它是幾乎所有數(shù)據(jù)分析高級工具的構(gòu)建基礎(chǔ)。
    ① ndarray ,一個具有矢量算數(shù)運(yùn)算和復(fù)雜廣播能力的快速且節(jié)省空間的多維數(shù)組。
    ② 用于對整組數(shù)據(jù)進(jìn)行快速運(yùn)算的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)(無需編寫循環(huán))。
    ③ 用于讀寫磁盤數(shù)據(jù)的工具以及用于操作內(nèi)存映射文件的工具。
    ④ 線性代數(shù)、隨機(jī)數(shù)生成及傅里葉變換功能。
    ⑤ 用于集成由C,C++,Fortran等語言編寫的代碼的工具CAPI,將數(shù)據(jù)傳遞給外部庫(生態(tài)系統(tǒng)角度)。
    ⑥ Numpy本身并沒有提供多么高級的數(shù)據(jù)分析功能,理解Numpy數(shù)組以及面向數(shù)組的計算將有助于你更加高效地使用pandas等工具。精通面向數(shù)組的編程和思維方式是成為Python科學(xué)計算牛人的一大關(guān)鍵步驟。

  • 對于大部分?jǐn)?shù)據(jù)分析應(yīng)用而言,最關(guān)注的功能主要集中于:
    ① 用于數(shù)據(jù)整理、自己構(gòu)建、過濾、轉(zhuǎn)換等快速的矢量化數(shù)組運(yùn)算。
    ② 常用的數(shù)組算法,如排序、唯一化、集合運(yùn)算等。
    ③ 高效的描述統(tǒng)計和數(shù)據(jù)聚合/摘要運(yùn)算。
    ④ 用于異構(gòu)數(shù)據(jù)集的合并/連接運(yùn)算的數(shù)據(jù)對齊和關(guān)系型數(shù)據(jù)運(yùn)算。
    ⑤ 將條件邏輯表述為數(shù)組表達(dá)式(而不是帶有if-elif-else分支的循環(huán))。
    ⑥ 數(shù)據(jù)的分組運(yùn)算(聚合、轉(zhuǎn)換、函數(shù)應(yīng)用等)。

二 ndarray:一種多維數(shù)組對象

  • Numpy最重要的一個特點(diǎn)就是其N維數(shù)組對象:ndarray,該對象是一個快速而靈活的大數(shù)據(jù)集容器??梢岳眠@種數(shù)組對整塊數(shù)據(jù)執(zhí)行一些數(shù)學(xué)運(yùn)算,其語法與標(biāo)量元素之間的運(yùn)算一樣。
  • ndarray是一個通用的同構(gòu)數(shù)據(jù)多維容器,其中所有的元素必須是相同類型的。每個數(shù)組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用于說明數(shù)據(jù)類型的對象)。
data.shape() (2,3) data.dtype() ('float64')

1 創(chuàng)建ndarray

  • 序列型的對象
data = [1,2,3,4] arr = np.array(data)
  • 嵌套序列,嵌套序列將會被轉(zhuǎn)換為一個多維數(shù)組。
  • np.array會嘗試為新建的數(shù)組推斷出一個較為合適的數(shù)據(jù)類型,數(shù)據(jù)類型保存在一個特殊的dtype對象中。
  • 其他的創(chuàng)建數(shù)組的函數(shù)。
np.zeros() #指定長度或形狀的數(shù)組全部為0 np.ones() #指定長度或形狀的數(shù)組全部為1 np.empty() #空數(shù)組 np.arange() #python內(nèi)置函數(shù)的數(shù)組版

2 ndarray的數(shù)據(jù)類型

  • dtype(數(shù)據(jù)類型)是一個特殊的對象,它含有ndarray將一塊內(nèi)存解釋為特定數(shù)據(jù)類型所需的信息:
arr = np.array([1,2,3],dtype = np.float64) arr.dtype()
  • dtype是Numpy如此強(qiáng)大和靈活的原因之一。
  • Numpy的數(shù)據(jù)類型:
    • int8/uint8——有符號和無符號
    • float64——浮點(diǎn)型
    • complex64——復(fù)數(shù)
    • bool——布爾型
    • object——python對象類型
    • string_——字符串類型
    • unicode——unicode類型
  • 可以通過ndarray的astype方法顯式地轉(zhuǎn)換其dtype
float_arr = arr.astype(np.float64)
  • 調(diào)用astype無論如何都會創(chuàng)建出一個新的數(shù)組(原始數(shù)據(jù)的一份拷貝),即使新dtype跟以前的一樣

3 數(shù)組和標(biāo)量之間的運(yùn)算

  • 數(shù)組很重要,因為它使你不用編寫循環(huán)即可對數(shù)據(jù)執(zhí)行批量運(yùn)算。這通常就叫做矢量化。
  • 大小相等的任何算術(shù)運(yùn)算都會將運(yùn)算應(yīng)用到元素級。
  • 數(shù)組與標(biāo)量的算術(shù)運(yùn)算也會將那個標(biāo)量值傳播到各個元素。
  • 不同大小的數(shù)組之間的運(yùn)算叫做廣播(廣播機(jī)制)。

4 基本的索引和切片

  • Numpy數(shù)組的索引是一個內(nèi)容豐富的主題,因為選取數(shù)據(jù)子集或單個元素的方式有很多。
  • 將一個標(biāo)量值賦值給一個切片時,該值會自動廣播到整個選區(qū)。
  • 跟列表最重要的區(qū)別在于,數(shù)組切片是原始數(shù)組的視圖,這意味著數(shù)據(jù)不會被復(fù)制,視圖上的任何修改都會直接反映到源數(shù)據(jù)上。如果需要一份副本而非本視圖,則需要顯式復(fù)制操作:arr.copy()。
  • Numpy的設(shè)計目的是處理大數(shù)據(jù)。Numpy將數(shù)據(jù)來回復(fù)制的話將會產(chǎn)生很多性能和內(nèi)存問題。
① 元素索引
  • 對于高維度數(shù)組,能做的事情更多。在一個二維數(shù)組中,各索引位置上的元素不再是標(biāo)量,而是一維數(shù)組。
  • 可以對高維數(shù)組各個元素進(jìn)行遞歸訪問,也可以傳入一個逗號隔開的索引列表來選取單個元素。
arr2d = np.array([1,2,3],[4,5,6],[7,8,9]) arr2d[0],[2] = arr2d[0,2] = 3
② 切片索引
  • nadrray的切片語法跟python列表這樣的一維對象差不多。
  • 高緯度對象的切片花樣比較多。可以在一個軸或者多個軸上進(jìn)行切片,也可以跟整數(shù)索引混合使用。
arr2d[:2,1:] #只能得到相同維數(shù)的數(shù)組視圖 arr2d[1,:2] #通過將整數(shù)索引和切片混合,可以得到低維度的切片 arr2d[:,:1] #只有冒號表示選取整個軸
③ 布爾型索引
  • 判斷滿足條件
data[names = 'bob',2:] #布爾型數(shù)組的長度必須跟被索引的軸長度一致,此外,還可以與切片、整數(shù)等混用
④ 花式索引
  • 花式索引是一個Numpy術(shù)語,它指的是利用整數(shù)數(shù)組進(jìn)行索引
arr = np.empty((8,4)) arr[[4,3,0,6]] #只需傳入一個用于指定順序的整數(shù)列表或ndarray即可 arr[[-3,-5,-7]] #使用負(fù)數(shù)索引將會從末尾開始選取行 arr = np.arange(32).reshape((8,4)) arr[[1,5,7,2],[0,3,1,2]] #一次傳入多個索引數(shù)組會有些特別
⑤ 數(shù)組轉(zhuǎn)置和軸對換
  • 轉(zhuǎn)置(transpose)是重塑的一種特殊形式,它返回的是源數(shù)據(jù)的視圖(不會進(jìn)行任何復(fù)制操作)
  • T屬性。進(jìn)行矩陣計算時,經(jīng)常需要用到該操作。

三 通用函數(shù):快速的元素級數(shù)組函數(shù)

  • 通用函數(shù)(ufunc)是一種對nadrray中的數(shù)據(jù)執(zhí)行元素級運(yùn)算的函數(shù)??梢詫⑵淇醋龊唵魏瘮?shù)(接受一個或多個標(biāo)量值,并產(chǎn)生一個 或多個標(biāo)量值)的 矢量化包裝器。
  • 許多ufunc都是簡單的元素級變體。如np.sqrt() /np.exp()
  • 一元ufunc(接受一個數(shù)組):
    • abs/fabs #絕對值 ,非負(fù)數(shù)的絕對值。
    • sqrt #計算各元素平方根。
    • square #計算各元素平方。
    • exp #計算各元素指數(shù)。
    • log/log10/log2/log1p #計算各元素的自然對數(shù)。
    • sign #計算各元素的正負(fù)號。
    • ceil #計算各元素的ceiling值,即大于等于該值的最小整數(shù)。
    • floor #計算各元素的floor值,即小于等于該值的最大整數(shù)。
    • rint #將各元素四舍五入到最接近的整數(shù)。
    • modf #將數(shù)組的小數(shù)和整數(shù)部分以兩個獨(dú)立數(shù)組的形式返回。
    • isnan #返回一個表示“哪些值是NaN”的布爾型數(shù)組。
    • isfinite/isinf #返回表示無窮的布爾型數(shù)組。
    • cos/cosh/sin/sinh/tan/tanh #三角函數(shù)
  • 二元ufunc(接受兩個數(shù)組):
    • add #將數(shù)組中對應(yīng)的元素相加
    • subtract #從第一個數(shù)組中減去第二個數(shù)組中的元素。
    • multiply #數(shù)組元素相乘。
    • divide/floor_divide #除法或向下圓整除法,丟棄余數(shù)。
    • power #計算第二個數(shù)組元素b相對于第一個數(shù)組中元素a的計算:a的b次方。
    • maximum/fmax #元素級的最大值計算,忽略NaN。
    • minimum/fmin #元素級的最小值計算,忽略NaN。
    • copysign #將第二個數(shù)組的值得符號復(fù)制給第一個數(shù)組中對應(yīng)的值。
    • greater/greater_equal/less/less_equal/equal/not_equal #執(zhí)行元素級的比較運(yùn)算,最終產(chǎn)生布爾型數(shù)組。
    • logical_and/logical_or/logical_xor #執(zhí)行元素級的真值邏輯運(yùn)算 (與或非)。

四 利用數(shù)組進(jìn)行數(shù)據(jù)處理

  • Numpy數(shù)組可以將許多種數(shù)據(jù)處理任務(wù)表述為簡潔的數(shù)組表達(dá)式(否則需要編寫循環(huán))。
  • 用數(shù)組表達(dá)式代替循環(huán)的做法,通常被稱作矢量化。一般來說,矢量化數(shù)組運(yùn)算比等價的純python方法快1~2個數(shù)量級(甚至更多)。
  • 廣播——是一種針對矢量化計算的強(qiáng)大手段。

1 將條件邏輯表述為數(shù)組計算

  • 在數(shù)據(jù)分析中,where通常用于根據(jù)一個數(shù)組而產(chǎn)生一個新的數(shù)組。
  • np.where函數(shù)是三元表達(dá)式x if condition else y 的矢量化版本。
  • np.where的第二個和第三個參數(shù)不必是數(shù)組,傳遞給where的數(shù)組大小可以不相等,甚至可以是標(biāo)量值。
  • 多層嵌套使用,功能更加強(qiáng)大。

2 數(shù)學(xué)與統(tǒng)計方法

  • 可以通過數(shù)組上的一組數(shù)學(xué)函數(shù)對整個數(shù)組或某個軸向的數(shù)據(jù)進(jìn)行統(tǒng)計計算、聚合運(yùn)算(aggregation 通常叫做約簡)。
  • 基本數(shù)組統(tǒng)計方法:
    • sum #對數(shù)組中全部或者軸向的元素求和。
    • mean #算術(shù)平均數(shù)
    • std/var #分別為標(biāo)準(zhǔn)差和方差,自由度可調(diào)
    • min/max #最大值和最小值
    • argmin/argmax #最大和最小元素的索引
    • cumsum #累計和
    • cumprod #累計積
  • sum和mean等函數(shù)可以接受一個axis參數(shù),用于計算軸向的統(tǒng)計值,得到一個少一維的數(shù)組。
  • cumsum、cumprod之類的方法不聚合,產(chǎn)生一個由中間結(jié)果組成的數(shù)組。

3 用于布爾型數(shù)組的方法

4 排序

  • 跟python一樣,Numpy數(shù)組也可以通過sort方法就地排序。
  • 多維數(shù)組可以在任意一個軸上進(jìn)行排序,只要給出軸編號傳給sort即可。
arr.sort()
  • 頂級方法返回的是數(shù)組的已排序副本,而就地排序會修改數(shù)組本身。
  • 計算數(shù)組分位數(shù)最簡單的方法是對齊進(jìn)行排序,然后選取特定位置的值。

5 唯一化及其他的集合邏輯

  • Numpy提供了一些針對一維ndarray的基本集合運(yùn)算。
  • 數(shù)組的集合運(yùn)算:
    • unique(x) #計算x中的唯一元素,并返回有序結(jié)果。等價于純python代碼中的set()。
    • intersect1d(x,y) #計算x和y中的公共元素,并返回有序結(jié)果。
    • union1d(x,y) #計算x和y的并集,并返回有序結(jié)果。
    • in1d(x,y) #得到一個表示“x是否包含于y”的布爾型數(shù)組。
    • setdiff1d(x,y) #集合的差,即元素在x中且不在y中。
    • setxor1d(x,y) #集合的對稱差,即存在于一個數(shù)組中但不同時存在于兩個數(shù)組中的元素。

五 用于數(shù)組的文件輸入輸出

  • Numpy可以讀寫磁盤上的文本數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)
  • np.save和np.load是讀寫磁盤數(shù)組數(shù)據(jù)的兩個主要函數(shù)
arr = np.loadtxt('array_ex.txt',delimiter = ',') arr = np.savetxt()

六 線性代數(shù)

  • 線性代數(shù)(如矩陣乘法、矩陣分解、行列式及其他方陣數(shù)學(xué)等)是任何數(shù)據(jù)庫的重要組成部分。

  • Numpy.ligalg中有一組標(biāo)準(zhǔn)的矩陣分解運(yùn)算以及諸如求逆合行列式之類的東西:

    • diag #以一維數(shù)組的形式返回方陣的對角線(或非對角線)元素,或?qū)⒁痪S數(shù)組轉(zhuǎn)換為方陣(非對角線元素為0)。
    • dot #矩陣乘法。
    • trace #計算對角線元素的和。
    • det #計算矩陣行列式。
    • eig #計算方陣的本征值和本征向量。
    • inv #計算方陣的逆。
    • pinv #計算矩陣的MP偽逆。
    • qr #計算QR分解。
    • svd #計算奇異值分解(SVD)。
    • solve #解線性方程組ax = b,其中a為一個方陣。
    • lstsq #計算ax = b的最小二乘解。

七 隨機(jī)數(shù)生成

  • Numpy.random模塊對python內(nèi)置的random進(jìn)行了補(bǔ)充,增加了一些用于高效生成多種概率分布的樣本值函數(shù)。而python內(nèi)置的random模塊則只能一次生成一個樣本值,且需要生成在大量樣本值時,Numpy.random快了不止一個量級。
  • 部分Numpy.random函數(shù):
    • seed #確定隨機(jī)數(shù)生成器的種子。
    • permutation #返回一個序列的隨機(jī)排列或返回一個隨機(jī)排列的范圍。
    • shuffle #對一個序列就地隨機(jī)排列。
    • rand #產(chǎn)生均勻分布的樣本值。
    • randint #從給定的上下限范圍內(nèi)隨機(jī)選取整數(shù)。
    • randn #產(chǎn)生正態(tài)分布(平均值為0,標(biāo)準(zhǔn)差為1)的樣本值。
    • binomial #產(chǎn)生二項分布的樣本值。
    • normal #產(chǎn)生正態(tài)(高斯)分布的樣本值。
    • beta #產(chǎn)生beta分布的樣本值。
    • chisquare #產(chǎn)生卡方分布的樣本值。
    • gamma #產(chǎn)生gamma分布的樣本值。
    • uniform #產(chǎn)生在[0,1]中 均勻分布的樣本值。
  • 隨機(jī)漫步
    • 通過模擬隨機(jī)漫步來說明如何而運(yùn)用數(shù)組運(yùn)算。
    • 首次穿越時間。
    • 一次模擬多個隨機(jī)漫步。

總結(jié)

以上是生活随笔為你收集整理的【Python】Numpy基础:数组和矢量运算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。