零基礎上手Python數據分析 (23):NumPy 數值計算基礎 - 數據分析的加速“引擎”

寫在前面

在這里插入圖片描述

—— 超越原生 Python 列表,解鎖高性能數值計算,深入理解 Pandas 的底層依賴

在前面一系列關于 Pandas 的學習中,我們已經領略了其在數據處理和分析方面的強大威力。我們學會了使用 DataFrame 和 Series 來高效地操作表格數據。但是,你是否好奇,Pandas 為何能夠如此高效地處理大規模數據?其背后隱藏著怎樣的 “秘密武器”?

答案就是我們今天要深入學習的主角——NumPy (Numerical Python)

NumPy:Python 科學計算的基石

NumPy 是 Python 中用于 科學計算基礎核心庫。它提供了:

  1. 一個強大的 N 維數組對象 (ndarray)
  2. 用于操作這些數組的各種 高效函數 (例如數學運算、邏輯運算、形狀操作、排序、選擇等)。
  3. 用于線性代數、傅里葉變換和隨機數生成的工具。

為什么在學習 Pandas 之后還要學習 NumPy?

你可能會問,既然 Pandas 已經那么好用了,為什么我們還要回過頭來學習 NumPy? 原因主要有以下幾點:

  • Pandas 的底層依賴: Pandas 的核心數據結構 Series 和 DataFrame 在底層很大程度上是建立在 NumPy 的 ndarray 之上的。理解 NumPy 的 ndarray 有助于我們更深入地理解 Pandas 的工作原理和性能特性。
  • 高性能數值計算: NumPy 的 ndarray 專為 高性能的數值計算 而設計。相比于 Python 內置的列表 (list),ndarray 在存儲和處理大規模數值數據時具有顯著的優勢:
    • 更少的內存占用: ndarray 存儲的是 同質數據類型 (所有元素類型相同),并且存儲方式更緊湊。
    • 更快的計算速度: NumPy 的核心運算是用 C 語言 實現的,并且支持 向量化操作 (Vectorization),可以對整個數組進行批量操作,避免了 Python 層面低效的循環,速度遠超原生 Python 代碼。
  • 科學計算生態系統的基礎: NumPy 是 Python 科學計算生態系統 (SciPy Stack) 的基石,許多其他重要的庫,如 SciPy (科學計算庫)、Matplotlib (可視化庫)、Scikit-learn (機器學習庫) 等,都依賴于 NumPy。掌握 NumPy 是深入學習這些庫的前提。
  • 直接應用場景: 在某些數據分析場景,特別是涉及大量 數值計算、矩陣運算、線性代數 等任務時,直接使用 NumPy 可能比 Pandas 更簡潔高效。

雖然本專欄將 NumPy 放在了 Pandas 之后講解 (因為對于初學者,直接上手 Pandas 更貼近數據分析的實際應用流程),但掌握 NumPy 的核心概念和操作,對于提升你的數據分析效率、深入理解 Pandas 以及為后續學習更高級的技術打下基礎,都至關重要。

本篇博客將帶你深入 NumPy 的世界,重點學習:

  • NumPy 的核心數據結構:ndarray (N-維數組)
  • 創建 ndarray 的多種方法
  • ndarray 的重要屬性
  • NumPy 的核心優勢:向量化運算 (UFuncs)
  • ndarray 的索引與切片操作
  • 布爾索引與條件篩選

掌握 NumPy,你將擁有更強大的數值計算能力,并能更深刻地理解你所使用的 Pandas 工具!

?? 一、NumPy 安裝與導入

與 Pandas 和 Matplotlib 類似,如果你使用 Anaconda,NumPy 通常已經預裝。 若未安裝,可使用 pip 或 conda 安裝:

pip install numpy
# 或者
conda install numpy

在 Python 腳本或 Jupyter Notebook 中,導入 NumPy 庫,并約定俗成地將其簡寫為 np

import numpy as np

?? 二、NumPy 的核心:ndarray 對象

NumPy 最核心的概念就是 ndarray (N-dimensional array),即 N 維數組。 它是一個 同質 (homogeneous) 數據類型的 多維網格

ndarray 的關鍵特性:

  • 維度 (Dimensions/Axes): ndarray 可以是一維、二維、三維甚至更高維度。 維度的數量稱為 秩 (rank)
  • 形狀 (Shape): 一個 元組 (tuple),描述了數組在 每個維度上的大小。 例如,一個 3 行 4 列的二維數組,其形狀為 (3, 4)
  • 數據類型 (dtype): 數組中 所有元素的數據類型必須相同。 NumPy 支持多種數值數據類型,例如 int8, int16, int32, int64, uint8 (無符號整數), float16, float32, float64, complex64, complex128, bool, object (可以存儲 Python 對象,但會失去 NumPy 的性能優勢), string_, unicode_ 等。 這與 Python 列表可以包含不同類型元素的特性形成對比。
  • 固定大小 (Fixed Size): ndarray 在創建時大小是固定的。 改變數組的大小會創建一個新的數組并刪除原來的數組。 這有助于提高內存效率和計算性能。

1. 創建 ndarray

有多種方法可以創建 NumPy ndarray 對象:

  • 從 Python 列表或元組創建:np.array()

    這是最常用的創建方式,可以將 Python 的列表或嵌套列表轉換為 ndarray。

    # 創建一維數組
    list1 = [1, 2, 3, 4, 5]
    arr1d = np.array(list1)
    print("一維數組 arr1d:\n", arr1d)
    print("arr1d 的類型:", type(arr1d))
    print("arr1d 的數據類型:", arr1d.dtype)# 創建二維數組 (矩陣)
    list2d = [[1, 2, 3], [4, 5, 6]]
    arr2d = np.array(list2d)
    print("\n二維數組 arr2d:\n", arr2d)
    print("arr2d 的數據類型:", arr2d.dtype)# 創建指定數據類型的數組
    arr_float = np.array([1, 2, 3], dtype=np.float64) # 指定為 float64 類型
    print("\n指定數據類型的數組 arr_float:\n", arr_float)
    print("arr_float 的數據類型:", arr_float.dtype)arr_str = np.array([1, 2, 3], dtype=str) # 指定為字符串類型
    print("\n指定數據類型的數組 arr_str:\n", arr_str)
    print("arr_str 的數據類型:", arr_str.dtype)
    
  • 使用 NumPy 內置函數創建特定數組:

    • np.zeros(shape, dtype=float): 創建指定形狀 shape 且所有元素都為 0 的數組。

      zeros_arr = np.zeros((2, 3)) # 創建一個 2x3 的全零浮點型數組
      print("\n全零數組 zeros_arr:\n", zeros_arr)
      
    • np.ones(shape, dtype=float): 創建指定形狀 shape 且所有元素都為 1 的數組。

      o

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80902.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80902.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 13.0 MTK Camera2 設置默認拍照尺寸功能實現

Android 13.0 MTK Camera2 設置默認拍照尺寸功能實現 文章目錄 需求:參考資料架構圖了解Camera相關專欄零散知識了解部分相機源碼參考,學習API使用,梳理流程,偏應用層Camera2 系統相關 修改文件-修改方案修改文件:修改…

HarmonyOS 框架基礎知識

參考文檔:HarmonyOS開發者文檔 第三方庫:OpenHarmony三方庫中心倉 基礎特性 Entry:關鍵裝飾器 Components:組件 特性EntryComponent??作用范圍僅用于頁面入口可定義任意可復用組件??數量限制??每個頁面有且僅有一個無數量…

前端分頁與瀑布流最佳實踐筆記 - React Antd 版

前端分頁與瀑布流最佳實踐筆記 - React Antd 版 1. 分頁與瀑布流對比 分頁(Pagination)瀑布流(Infinite Scroll)展示方式按頁分批加載,有明確頁碼控件滾動到底部時自動加載更多內容,無明顯分頁用戶控制用…

Linux網絡編程:TCP多進程/多線程并發服務器詳解

Linux網絡編程:TCP多進程/多線程并發服務器詳解 TCP并發服務器概述 在Linux網絡編程中,TCP服務器主要有三種并發模型: 多進程模型:為每個客戶端連接創建新進程多線程模型:為每個客戶端連接創建新線程I/O多路復用&am…

詳解springcloudalibaba采用prometheus+grafana實現服務監控

文章目錄 1.官網下載安裝 prometheus和grafana1.promethus2.grafana 2. 搭建springcloudalibaba集成prometheus、grafana1. 引入依賴,springboot3.2之后引入如下2. 在yml文件配置監控端點暴露配置3. 在當前啟動的應用代碼中添加,在prometheus顯示的時候附加當前應用…

數據分析1

一、常用數據處理模塊Numpy Numpy常用于高性能計算,在機器學習常常作為傳遞數據的容器。提供了兩種基本對象:ndarray、ufunc。 ndarray具有矢量算術運算和復雜廣播能力的快速且節省空間的多維數組。 ufunc提供了對數組快速運算的標準數學函數。 ndar…

DeepSeek智能時空數據分析(六):大模型NL2SQL繪制城市之間連線

序言:時空數據分析很有用,但是GIS/時空數據庫技術門檻太高 時空數據分析在優化業務運營中至關重要,然而,三大挑戰仍制約其發展:技術門檻高,需融合GIS理論、SQL開發與時空數據庫等多領域知識;空…

2023ICPC合肥題解

文章目錄 F. Colorful Balloons(簽到)E. Matrix Distances(思維小結論)J. Takeout Delivering(最短路)G. Streak Manipulation(二分dp)C. Cyclic Substrings(回文自動機) 題目鏈接 F. Colorful Balloons(簽到) int n;cin>>n;for(int i1;i<n;i) cin>>s[i];map<…

數字技術驅動下教育生態重構:從信息化整合到數字化轉型的路徑探究

一、引言 &#xff08;一&#xff09;研究背景與問題提出 在當今時代&#xff0c;數字技術正以前所未有的速度和深度滲透到社會的各個領域&#xff0c;教育領域也不例外。從早期的教育信息化整合到如今的數字化轉型&#xff0c;教育系統正經歷著一場深刻的范式變革。 回顧教…

terraform 動態塊(Dynamic Blocks)詳解與實踐

在 Terraform 中&#xff0c;動態塊&#xff08;Dynamic Blocks&#xff09; 是一種強大的機制&#xff0c;允許你根據變量或表達式動態生成配置塊&#xff0c;避免重復編寫相似的代碼。這在處理需要重復定義的結構&#xff08;如資源參數、嵌套配置&#xff09;時特別有用。以…

Unity3D引擎框架及用戶接口調用方式相關分析及匯總

分析目的 目前外網3D手游絕大部基于Unity3D引擎進行開發,Unity3D引擎屬于商業引擎,引擎整理框架的運行機制較為神秘,本文介紹Unity引擎框架、對象組織方式、用戶接口與引擎交互方式等原理,通過本文的分析和介紹可了解Unity3D框架中大致執行原理。 實現原理 Unity引擎作為…

react-09React生命周期

1.react生命周期&#xff08;舊版&#xff09; 1.1react初始掛載時的生命周期 1:構造器-constructor // 構造器constructor(props) {console.log(1:構造器-constructor);super(props)// 初始化狀態this.state {count: 0}} 2:組件將要掛載-componentWillMount // 組件將要掛載…

【NVM】管理不同版本的node.js

目錄 一、下載nvm 二、安裝nvm 三、驗證安裝 四、配置下載鏡像 五、使用NVM 前言&#xff1a;不同的node.js版本會讓你在使用過程很費勁&#xff0c;nvm是一個node版本管理工具&#xff0c;通過它可以安裝多種node版本并且可以快速、簡單的切換node版本。 一、下載nvm htt…

八大排序——冒泡排序/歸并排序

八大排序——冒泡排序/歸并排序 一、冒泡排序 1.1 冒泡排序 1.2 冒泡排序優化 二、歸并排序 1.1 歸并排序&#xff08;遞歸&#xff09; 1.2 遞歸排序&#xff08;非遞歸&#xff09; 一、冒泡排序 1.1 冒泡排序 比較相鄰的元素。如果第一個比第二個大&#xff0c;就交換…

區塊鏈隨學隨記

前情提要&#xff1a;本人技術棧為ganachehardhatpython ganache提供的是本地的區塊鏈環境&#xff0c;相當于模擬以太坊&#xff0c;這樣可以允許多個賬戶在本機交互。hardhat和remix都是區塊鏈ide&#xff0c;用于編寫和部署合約助記詞有個數規定&#xff0c;只有滿足這些個數…

Android原生開發基礎

Android實戰 Android 原生開發基礎 知識點1 介紹了解2 系統體系架構3 四大應用組件4 移動操作系統優缺點5 開發工具6 配置工具7 下載相關資源8JDK下載安裝流程9配置好SDK和JDK環境10 第一個Hello word11 AS開發前常用設置12模擬器使用運行13 真機調試14 AndroidUI基礎布局15 加…

網頁版 deepseek 對話問答內容導出為 PDF 文件和 Word 文件的瀏覽器插件下載安裝和使用說明

文章目錄 網頁版 deepseek 瀏覽器擴展應用程序插件1. 預覽效果2. 功能介紹3. 瀏覽器擴展應用程序下載3.1. 下載方式13.2. 下載方式24. 安裝教程4.1. Chrome 瀏覽器安裝步驟4.2. Edge 瀏覽器安裝步驟5. 使用說明網頁版 deepseek 瀏覽器擴展應用程序插件 1. 預覽效果 預覽效果 導…

DBdriver使用taos數據庫

首先創建連接 連接后比如數據庫里有三個庫 選擇其中的hypon 選中localhost&#xff0c;右鍵sql編輯器&#xff0c;打開sql控制臺 就插入了一條數據

【前端】【面試】如何實現圖片漸進式加載?有幾種方法

前端圖片漸進式加載 一、技術原理解析 漸進式加載是通過分階段、按需加載圖片&#xff0c;以提升用戶體驗和頁面性能的優化技術。主要包括以下實現方式&#xff1a; 懶加載&#xff1a;基于IntersectionObserver API&#xff0c;當圖片進入瀏覽器視口時才發起加載請求&#…

Spring Boot 中的條件注解

Spring Boot條件注解的匯總&#xff1a; 注解作用判斷依據使用場景ConditionalOnBean容器中存在指定Bean時&#xff0c;被注解的配置或Bean定義生效指定Bean在容器中存在依賴其他已存在Bean時配置相關功能ConditionalOnCheckpointRestore在特定檢查點恢復相關條件滿足時生效滿…