科學計算庫Numpy基礎&提升(理解+重要函數講解)

来源:https://www.cnblogs.com/qftie/archive/2022/07/19/16494819.html
-Advertisement-
Play Games

Intro 對於同樣的數值計算任務,使用numpy比直接編寫python代碼實現 優點: 代碼更簡潔: numpy直接以數組、矩陣為粒度計算並且支持大量的數學函數,而python需要用for迴圈從底層實現; 性能更高效: numpy的數組存儲效率和輸入輸出計算性能,比python使用list好很多, ...


Intro

對於同樣的數值計算任務,使用numpy比直接編寫python代碼實現 優點:

  • 代碼更簡潔: numpy直接以數組、矩陣為粒度計算並且支持大量的數學函數,而python需要用for迴圈從底層實現;
  • 性能更高效: numpy的數組存儲效率和輸入輸出計算性能,比python使用list好很多,用numpy進行計算要比原生Python快得多,而且數據量越大,效果越明顯;numpy的大部分代碼都是c語言實現的,這是numpy比python高效的原因

numpy核心:ndarray對象

ndarray對象

  • numpy的核心數據結構,叫做array就是數組,array對象可以是一維數組,也可以是多維數組
  • python的list也可以實現相同的功能,但是array的優勢在於性能好,包含數組元數據信息、大量的便捷函數
  • 成為 Scipy、Pandas、scilit-learn、tensorflow、paddlepaddle等框架的通用底層語言
  • numpy的array和python的list的一個區別是它的元素必須都是同一種數據類型,這也是numpy高性能的一個原因

ndarray屬性

個人以前會弄混shape和size,註意shape列印的是數組的形狀是一個元組,size則是表示數組大小即總共有多少個元素

  • shape 返回一個元組 表示array的形狀
  • ndim 返回一個數字 表示array的維度的數目
  • size 返回一個數字 表示array中所有數據元素的數目
  • dtype array中元素的數據類型,a.astype(str) 可以把a數組元素轉為str類型
  • itemsize 表示數組中每個元素的位元組大小

創建array的方法

  • 從Python的列表list和嵌套列表創建array,np.array([...])
  • 使用函數arange、linspace等創建等差數組,np.arange(start,stop,step,dtype) 左閉右開,np.linspace(start,stop,num,endpoint) 預設左右取閉,num是要刪除的等間隔樣例數量(預設50),endpoint 序列中是否包含stop值, 預設為true
  • 使用ones、ones_like、zeros、zeros_like、empty、empty_like、full、full_like、eye等函數創建,註意使用empty創建的數據是未初始化的,裡面的值可能是隨機值不要用,full則是將一個給定大小的數組填滿固定值,用法如np.full((2, 4), 666)
  • 生成隨機數的np.random模塊創建,np.random.seed(2022) 設置隨機種子,使得每次隨機的結果固定,np.random.rand(2,5) 隨機生成 2行5列的2維數組,返回數據在[0,1)之間;np.random.randint(2,5,5) 在[2,5) 範圍內生成5個隨機整數;np.random.uniform(2,5,10) 在 [2,5) 之間 生成均勻分佈的10個數字;np.random.uniform(2,5,(2,5)) 在 [2,5) 之間 生成均勻分佈的(2,5)個數字; np.random.randn((2,5)) 則返回有標準正態分佈的數據,均值1方差0;np.random.normal(1,10,(2,5)) 則可指定均值和標準差;另外,choice 從給定的數組裡 生成隨機結果,shuffle 把一個數組進行隨機排列(如果數組是多維的 則只會在第一維度打散數據),permutation 把一個數組進行隨機排列 ,或者數字的全排列,兩者功能相同但permutation不會更改原來的arr 會返回一個新的copy

numpy的數組索引

三種索引方法:

  • 基礎索引,切片法,不詳細敘述
  • 神奇索引,就是用整數數組進行的索引,比如對於x = np.arange(10),可以用x[np.array([[0,2],[1,3]])]來取x對應位置的值;對於二維數組,Y[:,[0, 2]] 篩選第0和第2列,Y[[0,2,3],[1,2,3]]同時指定行列
  • 布爾索引,對於x = np.arange(10),可以用x>5返回bool值的數組,x[x>5] = 1通過條件進行賦值,把x中大於5的值全部賦為1,x[x<5] += 20,小於5的值全部加20,還可以進行條件組合,比如x[(x%2==0)| (x>7)]x[(x%2==0)& (x>7)];註意對於二維數組Y = np.arange(20).reshape(4, 5) 來說,既有行又有列 因此返回的是 行列一維數組Y[Y>5] 返回的是行列一維數組,可以用Y[:, 3][Y[:, 3]>5] 把第3列大於5的行數據篩選出來

numpy數據操作

數組數學操作

A*B是對應位置元素相乘,對於arr = np.arange(12).reshape(3,4),可以用各種數學統計函數,包括sum,prod(元素乘積),cumsum(np.cumsum(arr)從頭到尾累加,每加一次輸出一個元素),cumprod(累積),min,max,median,mean,np.percentile(arr,[25,50,75])np.quantile(arr,[0.25,0.5,0.75])求取數列第?分位的數值(後者範圍為0-1),std(標準差)

,var(方差),np.average(arr, weights=np.random.rand(*arr.shape)) 加權平均,argmax 尋找最大值的下標

  • 對於numpy的聚合類函數的axis參數解釋:axis=0代表行 axis=1 代表列,axis=0 代表把行消解掉,axis=1 代表把列消解掉;axis=0 代表跨行計算, axis=1 代表跨列計算

數組合併操作

對於a = np.arange(9).reshape(3,3)以及b = np.arange(9,18).reshape(3,3),合併行(行變多)使用np.concatenate([a,b])np.vstack([a,b])np.row_stack([a,b]) ,合併列(列變多)使用np.concatenate([a,b],axis=1)np.hstack([a,b])np.column_stack([a,b])

參考

[1-5 Numpy教程 — 梗直哥隨筆 v0.1 文檔 (gengzhige-essay.readthedocs.io)](https://gengzhige-essay.readthedocs.io/docs/01 環境配置/1-5 Numpy教程.html)

科學計算庫Numpy - mathor (wmathor.com)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 視頻鏈接(P1-P2): 尚矽谷Vue2.0+Vue3.0全套教程丨vuejs從入門到精通 Vue是什麼? 介紹 原生JS實現(命令式編碼) 就一個命名一個命令嚴格執行 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <m ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 1、安裝 vue-video-player npm install vue-video-player --save npm install videojs-contrib-hls --save //播放直播 //在main.js中引入 / ...
  • 前言 演算法是什麼?演算法就是數學規律.怎麼去總結和發現這個規律,就是理解演算法的過程. KMP演算法的本質是窮舉法,而並不是去創造新的匹配邏輯. 以下將搜尋的字元串稱為子串(part),以P表示.被搜尋的字元串稱為總串(total),以T表示. start代表P串在T串中開始匹配的位置,end代表P串與T ...
  • 視頻鏈接(p1~p8): golang入門到項目實戰 [2022最新Go語言教程,沒有廢話,純乾貨!] 參考鏈接: 用vscode開發go的時候,安裝go包報錯:connectex: A connection attempt failed because the connected party di ...
  • 這裡只討論作反向代理時,當上游服務發生如介面超時、返回指定狀態碼等狀況時而導致nginx超時重試。 這裡使用的nginx版本為1.16.1,可通過nginx -V查看版本。 超時重試主要通過配置ngx_http_upstream_module和ngx_http_proxy_module模塊中欄位實現 ...
  • 前言 嗨嘍,大家好呀~這裡是愛看美女的茜茜吶 今天我們要採集的網站呢,它是一款國民級短視頻App。 在它那裡,瞭解真實的世界,認識有趣的人,也可以記錄真實而有趣的自己。 🛫 現在,話不多說,讓我們開始叭 ⛱ 本篇代碼提供者:青燈教育-巳月 知識點: 動態數據抓包 requests發送請求 json ...
  • 背景 每次通過 docker build 'xxx' 的時候,總是會去maven鏡像下載一大堆Jar包,平均每次build都要在3分鐘左右,效率非常低下,於是查閱了各種辦法試圖讓第一次構建的時候才下載jar包,後面的構建都能復用,類似於本地開發代碼會指定maven倉庫一樣 實現方案 使用 -Dmav ...
  • Day02 第二天主要瞭解的內容為軟體研發的流程,如何使用dos命令框去編譯和運行java程式,以及編寫第一個java程式(HelloWorld) 瞭解編碼格式,Java中的代碼註釋,java如何輸出內容,java中的數據類型以及數據類型的轉換 標識符和關鍵字以及保留字 軟體研發流程 需求調研 需求 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...