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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NumPy基本使用

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NumPy基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

一句話介紹

NumPy是高性能科學計算和數據分析的基礎包。它是pandas等其他各種工具的基礎。

主要功能

  • ndarray,一個多維數組結構,高效且節省空間
  • 無需循環對整組數據進行快速運算的數學函數
  • 注意:數組不同與python中列表,數組中的元素類型是一致的,并且數組長度也是確定的。

    安裝

    pip install numpy

    引用方式

    import numpy as np

    創建ndarray對象

    創建

    a = np.array([1,2,3,4])

    常用屬性

  • T 數組的轉置(對高維數組而言)

    a = np.arange(6).reshape(2,3) """ array([[0, 1, 2],[3, 4, 5]]) """a.T """ array([[0, 3],[1, 4],[2, 5]]) """

    ?

  • dtype 數組元素的數據類型:

    • bool_, int(8,16,32,64), uint(8,16,32,64), float(16,32,64)
    • 類型轉換:astype()
  • size 數組元素的個數

  • ndim 數組的維數

  • shape 數組的維度大小(以元組形式)

  • 創建ndarray對象的方式

  • array() 將列表轉換為數組,可選擇顯式指定dtype

  • arange() range的numpy版,支持浮點數(步長可以是小數)

    a = np.arange(1, 10, 1.2) """ array([ 1. , 2.2, 3.4, 4.6, 5.8, 7. , 8.2, 9.4]) """# 一維轉二維:reshape()方法a = np.arange(15).reshape(3,5) """ array([[ 0, 1, 2, 3, 4],[ 5, 6, 7, 8, 9],[10, 11, 12, 13, 14]]) """

    ?

  • linspace() 類似arange(),第三個參數為數組長度(分為幾份);(補充:計算機不能表示連續的的東西,比如計算機繪制函數圖,其實就是打點,將一段數分為盡可能多的份數)

    a = np.linspace(0, 10, 6) """ array([ 0., 2., 4., 6., 8., 10.]) """

    ?

  • zeros() 根據指定形狀和dtype創建全0數組

    a = np.zeros(10) """ step 1:假如一個數字占4個字節(32為機器),劃分40字節的內存空間 step 2: 對這些內存空間清零(默認是浮點型) array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) """# 創建二維數組(理解為表格)a = np.zeros((3,5), dtype='int') """ array([[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]) """# 創建三位數組(理解為一本表格,有3頁,每頁4行5列)a = np.zeros((3,4,5), dtype='int') """ array([[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]],[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]],[[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0],[0, 0, 0, 0, 0]]]) """

    ?

  • ones() 根據指定形狀和dtype創建全1數組

  • empty() 根據指定形狀和dtype創建空數組(隨機值)

    a = np.empty(10) """ 比起zeros() 少了第二步(內存空間內還存在原來的值),因此如果創建完數組確定要重新賦值,可以選擇這種方式,速度快。 array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]) """

    ?

  • eye() 根據指定邊長和dtype創建單位矩陣

  • tolist() ndarray對象(數組)轉列表:

  • 索引和切片

    簡單計算

    數組和數字(向量與標量)之間

    a = np.array([1,2,3,4])b = a + 1 # array([2, 3, 4, 5]) b = a * 3 # array([ 3, 6, 9, 12]) b = 1 / a # array([ 1. , 0.5 , 0.33333333, 0.25 ]) b = 1 // a # array([1, 0, 0, 0], dtype=int32) b = a ** 0.5 # array([ 1. , 1.41421356, 1.73205081, 2. ])

    同樣大小數組之間的運算

    a = np.array([1,2,3,4]) b = np.array([5,6,7,8])a + b # array([ 6, 8, 10, 12]) a / b # array([ 0.2 , 0.33333333, 0.42857143, 0.5 ]) a ** b # array([ 1, 64, 2187, 65536], dtype=int32)

    數組的索引

    # 一維數組,同python中的列表 a = np.arange(10) a[3] # 3 ## 二維數組,用逗號,逗號左邊是行,右邊是列 a = np.arange(10).reshape(2,5) ''' array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]]) ''' a[1,3] # 第1行第3個元素:8

    數組的切片(顧頭不顧尾)

    # 一維切片,同python中的列表# 二維切片 a = np.arange(15).reshape(3,5) """ array([[ 0, 1, 2, 3, 4],[ 5, 6, 7, 8, 9],[10, 11, 12, 13, 14]]) """# 對數組a 6-8-11-13的矩形區域切片 # 用逗號,逗號左邊是行,右邊是列:從第1行切到最后,再從第一列切到第4列(不包含) a[1:, 1:4] # """ array([[ 6, 7, 8],[11, 12, 13]]) """# 切片的拷貝問題 a = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) b = a[0:5] # array([0, 1, 2, 3, 4]) b[1] = 666 """ a array([ 0, 666, 2, 3, 4, 5, 6, 7, 8, 9])注意: 如果是python的列表,對a切片賦值給b是深拷貝,會劃分新的內存空間,對b中元素的修改不影響a 但是,對于ndarray對象,由于常用來處理大數據,默認執行的是淺拷貝(數據量太大,深拷貝費空間),b相當于是a的一個視圖,因此對b中元素的修改,將導致對a的修改 """# 解決方案: b = a[0:5].copy() # 執行深拷貝,這樣對b中元素的修改不會影響a

    布爾型索引

    問題1:給一個數組,選出數組中所有大于5的數。

    a = np.array([1,3,8,9,11,2]) a[a>5] # array([ 8, 9, 11])""" a>5會對a中的每一個元素進行判斷,返回一個布爾數組 布爾型索引:將同樣大小的布爾數組傳進索引,會返回一個由所有True對應位置的元素的數組 """

    問題2:給一個數組,選出數組中所有大于5的偶數。

    a = np.array([1,3,8,9,11,2]) a[(a>5) & (a%2==0)] # array([8])""" 注意:兩個條件必須用括號括起來,因為 & 運算符的優先級高 """

    問題3:給一個數組,選出數組中所有大于5的數和偶數。

    a = np.array([1,3,8,9,11,2]) a[(a>5) | (a%2==0)] # array([ 8, 9, 11, 2])

    注意,非 的邏輯運算符是 ~ 飄號

    a = np.array([True, False]) ~a # array([False, True], dtype=bool)

    花式索引

    中括號中存的是用逗號分隔的下標

    # 一維 a = np.arange(1,10) # array([1, 2, 3, 4, 5, 6, 7, 8, 9])b = [1, 3, 6] # [] 中存的是下標 a[b] # array([2, 4, 7])# 二維 a =np.arange(15).reshape(3,5) """ array([[ 0, 1, 2, 3, 4],[ 5, 6, 7, 8, 9],[10, 11, 12, 13, 14]]) """# 切片其中的 6 8 11 13 a[1:,[1, 3]] """ array([[ 6, 8],[11, 13]]) """# 選出其第一列和第三列,組成新的二維數組。 a =np.arange(15).reshape(3,5) a[:,[1,3]] """ array([[ 1, 3],[ 6, 8],[11, 13]]) """# 注意,不要在逗號的左右兩邊同時使用花式索引 a[[1,2],[1,3]] """ array([ 6, 13]) """

    通用函數

    概念:能同時對數組中所有元素進行運算的函數

    一元函數

    abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan

    ceil, floor, rint, trunc 這幾個函數用于浮點數轉整數;trunc相當于python中的int();rint()四舍五入,相當與python中的round();

    isnan, isinf,用于判斷是nan 和 inf;注意, nan, inf 是浮點數的兩個特殊值:

    isinf表示無限大,是一個float型(5/0 除數越小,結果越大,除數趨近于零時,就是無限大。)

    而nan, 表示不是一個數,甚至也不等于它本身!

    a = np.array([1,2,3,4,5]) b = np.array([1,1,1,1,0])c = a/b # array([ 1., 2., 3., 4., inf]) np.isinf(c) # array([False, False, False, False, True], dtype=bool) c[~np.isinf(c)] # 布爾索引 array([ 1., 2., 3., 4.])float('inf') # inf type(float('inf')) # floatfloat('nan') # nan type(float('nan')) # float# nan不等于任何數 float('nan') == 1.5 # False float('nan') == float('inf') # False float('nan') == float('nan') # False

    二元函數

    add, substract, multiply, divide, power, mod, 這些二元函數用的相對較少,因為可以直接用 符號

    maximum, mininum, 比較兩個數組,取其中最大/最小部分構成新的數組

    a = np.array([1, 2, 3, 4, 5]) b = np.array([2, 3, 4, 1, 6]) np.maximum(a,b) """ array([2, 3, 4, 4, 6]) """

    數學和統計方法

    調用方式:np.func(obj)或obj.func()

    sum 求和

    mean 求平均數

    std 求標準差(方差開根號)

    var 求方差(每個數減平均值再平方的結果,相加求平均

    平均值一樣時,方差/標準查,反映數據的離散程度

    # a, b, c三個數組的平均值相同 a = np.array([7,8,10,8,7]) b = np.array([8,8,8,8,8]) c = np.array([10,8,6,10,6])# 通過方差反映離散程度 np.var(a) # 1.2 np.var(b) # 0.0 np.var(c) # 3.2000000000000002

    均值加減 n倍的標準差,可以估計數據的范圍

    import random a = np.array([random.uniform(10,20) for i in range(10)]) """ array([ 14.59699686, 12.69868323, 11.06636046, 11.62997516,14.65875624, 12.84485756, 14.87239277, 10.47546367,12.55186776, 14.45094081]) """# 一倍 a.mean() - a.std()*1 # 11.460966440505564 a.mean() + a.std()*1 # 14.508292464563356# 二倍 a.mean() - a.std()*2 # 9.9373034284766675 a.mean() + a.std()*2 # 16.031955476592252

    min 求最小值

    max 求最大值

    argmin 求最小值索引

    argmax 求最大值索引

    隨機數生成

    隨機數函數在np.random子包中,比起Python的random模塊,其可以產生二維數組

    rand 給定形狀產生隨機數組(0到1之間的數)

    randint 給定形狀產生隨機整數

    np.random.randint(10,20,(3,5)) """ array([[15, 14, 15, 16, 14],[14, 12, 10, 10, 13],[12, 12, 13, 10, 18]]) """

    choice 給定形狀產生隨機選擇

    np.random.choice([1,2,3,4,5],10) """ array([4, 1, 3, 4, 2, 1, 5, 5, 3, 1]) """np.random.choice([1,2,3,4,5],(3,5)) """ array([[1, 5, 3, 3, 1],[4, 3, 1, 4, 2],[3, 3, 5, 3, 3]]) """

    shuffle 與random.shuffle相同

    uniform 給定形狀產生隨機浮點數組

    a = np.random.uniform(10,20,(3,5)) """ array([[ 11.08600377, 10.59471275, 16.25737906, 11.0429535 ,16.12688335],[ 15.38383353, 10.8729155 , 14.77521291, 13.75258492,14.54417658],[ 17.8514871 , 13.61437731, 16.87297584, 14.22388704,18.50198588]]) """

    總結

    以上是生活随笔為你收集整理的NumPy基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。