數據分析—numpy庫

numpy庫

NumPy 庫全面指南

NumPy (Numerical Python) 是 Python 科學計算的基礎庫,提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。

一、安裝與基礎

1. 安裝 NumPy

pip install numpy

2. 導入 NumPy

import numpy as np # 標準導入方式

二、數組創建

1. 基礎數組創建

# 從列表創建 
a = np.array([1, 2, 3]) # 一維數組 
b = np.array([[1, 2], [3, 4]]) # 二維數組 
# 特殊數組zeros = np.zeros((3, 4)) # 全0數組 
ones = np.ones((2, 3)) # 全1數組 
empty = np.empty((2, 2)) # 未初始化數組 
full = np.full((2, 2), 7) # 填充指定值 
eye = np.eye(3) # 單位矩陣

2. 序列數組

# 等差數列 
arr = np.arange(0, 10, 2) # [0, 2, 4, 6, 8] 
# 等間距數列 
lin = np.linspace(0, 1, 5) # [0. , 0.25, 0.5 , 0.75, 1. ] 
# 對數間隔 
log = np.logspace(0, 2, 3) # [ 1., 10., 100.]

3. 隨機數組

# 均勻分布
rand = np.random.rand(2, 3)       # 0-1隨機數# 正態分布
randn = np.random.randn(100)      # 標準正態分布# 隨機整數
randint = np.random.randint(0, 10, size=5)

三、數組操作

1. 數組屬性

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim)    # 維度: 2
print(arr.shape)   # 形狀: (2, 3)
print(arr.size)    # 元素總數: 6
print(arr.dtype)   # 數據類型: int32/int64

2. 索引與切片

arr = np.array([0, 1, 2, 3, 4, 5])# 基本索引
print(arr[2])      # 2
print(arr[-1])     # 5# 切片
print(arr[1:4])    # [1, 2, 3]
print(arr[::2])    # [0, 2, 4]# 多維數組索引
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2d[1, 2])  # 6
print(arr2d[:, 1])  # [2, 5]

3. 形狀操作

arr = np.arange(6)# 改變形狀
print(arr.reshape(2, 3))
# [[0 1 2]
#  [3 4 5]]# 展平數組
print(arr.flatten())    # [0 1 2 3 4 5]# 轉置
arr2d = np.arange(6).reshape(2, 3)
print(arr2d.T)
# [[0 3]
#  [1 4]
#  [2 5]]

四、數組運算

1. 數學運算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])# 算術運算
print(a + b)    # [5 7 9]
print(a * b)    # [4 10 18]
print(a ** 2)   # [1 4 9]# 三角函數
print(np.sin(a))# 對數運算
print(np.log(a))

2. 統計運算

arr = np.array([[1, 2], [3, 4]])print(np.sum(arr))       # 10
print(np.mean(arr))      # 2.5
print(np.max(arr))       # 4
print(np.min(arr, axis=0))  # 每列最小值 [1, 2]
print(np.std(arr))       # 標準差
print(np.median(arr))    # 中位數

3. 廣播機制

a = np.array([1, 2, 3])
b = 2# 標量廣播
print(a * b)  # [2, 4, 6]# 形狀不同的數組廣播
a = np.array([[1], [2], [3]])
b = np.array([4, 5, 6])
print(a + b)
# [[5 6 7]
#  [6 7 8]
#  [7 8 9]]

五、線性代數

1. 矩陣運算

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])# 矩陣乘法
print(np.dot(a, b))
# [[19 22]
#  [43 50]]# 矩陣轉置
print(a.T)
# [[1 3]
#  [2 4]]# 行列式
print(np.linalg.det(a))  # -2.0# 逆矩陣
print(np.linalg.inv(a))
# [[-2.   1. ]
#  [ 1.5 -0.5]]

2. 解線性方程組

# 解方程組:
# 3x + y = 9
# x + 2y = 8
A = np.array([[3, 1], [1, 2]])
B = np.array([9, 8])
X = np.linalg.solve(A, B)
print(X)  # [2. 3.]

六、、實用技巧

1. 布爾索引

arr = np.array([1, 2, 3, 4, 5])# 條件篩選
print(arr[arr > 3])          # [4, 5]
print(arr[(arr > 2) & (arr < 5)])  # [3, 4]

2. 花式索引

arr = np.arange(12).reshape(3, 4)# 使用索引數組
print(arr[[0, 2]])  # 第0行和第2行
print(arr[:, [1, 3]])  # 第1列和第3列

3.數組切割

import numpy as np
arr = np.arange(36).reshape(6,6)
print(arr)
'''[[ 0 ?1 ?2 ?3 ?4 ?5][ 6 ?7 ?8 ?9 10 11][12 13 14 15 16 17][18 19 20 21 22 23][24 25 26 27 28 29][30 31 32 33 34 35]]'''
arr1 = np.hsplit(arr,2)#水平
print(arr1)
'''[array([[ 0,  1,  2],[ 6,  7,  8],[12, 13, 14],[18, 19, 20],[24, 25, 26],[30, 31, 32]]), array([[ 3,  4,  5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23],[27, 28, 29],[33, 34, 35]])]'''
arr2 = np.vsplit(arr,2)#豎直
print(arr2)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
b = np.split(arr,2,axis=0)#0為水平,1為豎直,默認為1
print(b)
'''[array([[ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35]])]'''
e = np.array_split(arr,2,1)

4.數組拼接

import numpy as nparr = np.arange(9).reshape(3,3)arr2 =arr*2
print(arr2)arr3 = np.hstack((arr,arr2))#水平
print(arr3,'\n')arr4 = np.vstack((arr,arr2))#豎直
print(arr4,end='\n')arr6 = np.concatenate((arr,arr2),axis=0)#0為水平,1為豎直,默認為0
print(arr6,end='\n')'''[[ 0  2  4][ 6  8 10][12 14 16]]#原數組[[ 0  1  2  0  2  4][ 3  4  5  6  8 10][ 6  7  8 12 14 16]] #水平[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#豎直[[ 0  1  2][ 3  4  5][ 6  7  8][ 0  2  4][ 6  8 10][12 14 16]]#
'''

5.讀取文件

import numpy as np# 讀取簡單文本文件
data = np.loadtxt('data.txt')
print(data)# 指定分隔符(默認是任意空白字符)
data = np.loadtxt('data.csv', delimiter=',')# 跳過標題行
data = np.loadtxt('data.txt', skiprows=1)# 選擇特定列
data = np.loadtxt('data.txt', usecols=(0, 2))  # 讀取第1和第3列# 指定數據類型
data = np.loadtxt('data.txt', dtype=np.float32)

6、數組排序

import numpy as nparr = np.array([3, 1, 4, 2, 5])
sorted_arr = np.sort(arr)
print(sorted_arr)  # 輸出: [1 2 3 4 5]
arr = np.array([3, 1, 4, 2, 5])arr = np.array([3, 1, 4, 2, 5])
indices = np.argsort(arr)
print(indices)  # 輸出: [1 3 0 2 4]
print(arr[indices])  # 輸出: [1 2 3 4 5]arr = np.array(['apple', 'banana', 'cherry', 'date'])# 創建結構化數組
dtype = [('name', 'S10'), ('age', int), ('score', float)]
values = [('Alice', 25, 88.5), ('Bob', 32, 92.3), ('Charlie', 28, 85.0)]
arr = np.array(values, dtype=dtype)# 按年齡排序
print(np.sort(arr, order='age'))
# [(b'Alice', 25, 88.5) (b'Charlie', 28, 85. ) (b'Bob', 32, 92.3)]# 先按分數降序,再按年齡升序
print(np.sort(arr, order=['score', 'age']))
# [(b'Charlie', 28, 85. ) (b'Alice', 25, 88.5) (b'Bob', 32, 92.3)]# 按字符串長度排序
print(np.sort(arr, key=lambda x: len(x)))
# ['date' 'apple' 'banana' 'cherry']

?

NumPy 是 Python 科學計算生態系統的基石,掌握 NumPy 將為學習 Pandas、SciPy、scikit-learn 等庫打下堅實基礎。

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

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

相關文章

Vue3 setup、ref和reactive函數

一、setup函數1.理解&#xff1a;Vue3.0中一個新的配置項&#xff0c;值為一個函數。2.setup是所有Composition API(組合API)的“表演舞臺”。3.組件中用到的&#xff1a;數據、方法等等&#xff0c;均要配置在setup中。4.setup函數的兩種返回值&#xff1a;(1).若返回一個對象…

python中appium 的NoSuchElementException錯誤 原因以及解決辦法

錯誤收集D:\Program\Util\python.exe "D:/Program/myUtil/PyCharm 2024.3.5/plugins/python-ce/helpers/pycharm/_jb_pytest_runner.py" --target demo.py::TestAppium Testing started at 15:57 ... Launching pytest with arguments demo.py::TestAppium --no-hea…

mybatis-plus從入門到入土(四):持久層接口之BaseMapper和選裝件

大家好&#xff0c;今天繼續更新MybatisPlus從入門到入土系列&#xff0c;上一次的持久層接口還沒講完&#xff0c;只講了IService接口&#xff0c;今天我們繼續來講一下。 BaseMapper BaseMapper中的方法也比較簡單&#xff0c;都是增刪改查的基礎API&#xff0c;不知道大家還…

數組和指針的關系

在 C 語言中&#xff0c;?指針和數組有著非常緊密的聯系&#xff0c;但它們本質上是 ?不同的概念。理解它們的關系是掌握 C 語言內存操作的關鍵。下面我會從多個角度幫你梳理 ?指針和數組的直接聯系&#xff0c;并解釋它們的異同點。1. 數組和指針的本質區別?概念本質存儲方…

AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之github網站在線搜索

系列篇章?? No. 文章 1 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎的構建與初步實踐 2 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之GLM-4大模型技術的實踐探索 3 AI大模型探索之路-實戰篇:智能化IT領域搜索引擎之知乎網站數據獲取(初步實踐) 4 AI大模型探索之路…

從0到1學PHP(十二):PHP 框架入門與項目實戰

目錄一、主流 PHP 框架介紹1.1 Laravel1.2 ThinkPHP1.3 Yii1.4 框架的優勢二、框架基本使用&#xff08;以 Laravel 為例&#xff09;2.1 框架的安裝與配置2.2 路由定義、控制器創建、視圖渲染2.3 數據庫操作&#xff08;ORM 的使用&#xff09;三、小型項目實戰3.1 項目需求分…

MPLS LSP

一、概述上一章我們已經介紹過,LSP是MPLS報文在MPLS網絡中轉發時經過的路徑,可以看作是由報文傳輸方向節點為對應FEC分配的MPLS入標簽組成的,因為每臺設備上為每個FEC分配的入標簽是唯一 的&#xff0c;并與由下游節點為本地節點上該FEC分配的出標簽建立映射關系&#xff0c; 所…

圖像、視頻、音頻多模態大模型中長上下文token壓縮方法綜述

多模態大模型MLLMs 能夠處理高分辨率圖像、長視頻序列和冗長音頻輸入等復雜上下文&#xff0c;但自注意力機制的二次復雜度使得大量輸入 token 帶來了巨大的計算和內存需求。 如下圖&#xff0c;上&#xff1a;圖像、視頻和音頻數據類型可以在其表示維度上進行擴展&#xff0c;…

Spring MVC 九大組件源碼深度剖析(一):MultipartResolver - 文件上傳的幕后指揮官

文章目錄一、為什么從 MultipartResolver 開始&#xff1f;二、核心接口&#xff1a;定義文件上傳的契約三、實現解析&#xff1a;兩種策略的源碼較量1. StandardServletMultipartResolver&#xff08;Servlet 3.0 首選&#xff09;2. CommonsMultipartResolver&#xff08;兼容…

stm32是如何實現電源控制的?

STM32的電源控制主要通過內置的電源管理模塊&#xff08;PWR&#xff09;實現&#xff0c;涵蓋電壓調節、功耗模式切換和電源監控等功能。以下是其核心機制及實現方式&#xff1a;??1. 電源架構與供電區域??STM32的電源系統分為多個供電區域&#xff0c;各司其職&#xff1…

《R for Data Science (2e)》免費中文翻譯 (第3章) --- Data transformation(1)

寫在前面 本系列推文為《R for Data Science (2)》的中文翻譯版本。所有內容都通過開源免費的方式上傳至Github&#xff0c;歡迎大家參與貢獻&#xff0c;詳細信息見&#xff1a; Books-zh-cn 項目介紹&#xff1a; Books-zh-cn&#xff1a;開源免費的中文書籍社區 r4ds-zh-cn …

rclone、rsync、scp使用總結

數據同步工具使用總結【rclone、rsync、scp】一、數據處理背景二、數據處理方法對比1、數據關系梳理2、不同工具處理方法3、經驗總結三、工具擴展知識1、rclone工具介紹&#xff08;1&#xff09;、rclone概述&#xff08;2&#xff09;、安裝工具及配置本地文件遷移到云上服務…

用latex+vscode+ctex寫畢業論文

文章目錄前言一、安裝latex二、安裝ctex包三、更新ctex包四、使用ctex文檔類前言 用latexvscodectex寫畢業論文。&#xff08;英文論文不用安裝ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;為中文 LATEX 文檔提供了漢字輸出支持、標點壓縮、字…

深度學習·mmsegmentation基礎教程

mmsegmentation的使用教程 mmsegmentation微調方法總結 自定義自己的數據集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注冊&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定義訓練和測試的pipeline&#xff1a;mmsegme…

InfluxDB 與 Node.js 框架:Express 集成方案(二)

四、優化與注意事項 &#xff08;一&#xff09;性能優化技巧 連接池管理&#xff1a;使用連接池可以有效減少創建和銷毀數據庫連接的開銷。在 Node.js 中&#xff0c;可以借助influx模塊結合第三方連接池庫&#xff0c;如generic-pool來實現連接池的管理 。通過設置連接池的…

單位長度上的RC參數

1inch1000mil25.4mm2.54cm 使用SI9000計算導線上電容電感參數并使用Q2D進行仿真驗證。使用SI9000建立一個阻抗為50歐的微帶線模型&#xff0c;后對該模型進行1GHz頻域計算 通過計算得到結果&#xff0c;可知1GHz頻率下單位傳輸線上的RLGC參數使用SI9000計算好單位長度上的RLGC參…

基于Dockerfile 部署一個 Flask 應用

Docker 與 Python&#xff1a;容器化部署應用&#xff0c;實現快速發布與彈性伸縮 以下是一個簡單的 Flask 應用 # app.py - 一個簡單的Flask應用 from flask import Flask import osapp Flask(__name__)app.route("/") def hello():env os.environ.get(FLASK_ENV,…

DFT設計中的不同階段介紹

在DFT&#xff08;Design for Test&#xff0c;可測試性設計&#xff09;軟件開發中&#xff0c;針對設計檢測的完整流程通常包含Setup&#xff08;設置&#xff09;、Analysis&#xff08;分析&#xff09;、Insertion&#xff08;插入&#xff09;和Verification&#xff08;…

自動化測試準備工作:概念篇

自動化 什么是自動化? 超市的自動閘門&#xff0c;不需要手動的開門關門生活中的自動動化案例有效的減少了人力的消耗&#xff0c;同時也提高了生活的質量。 軟件自動化測試同理&#xff0c;通過編寫自動化測試程序&#xff08;減少人力和時間的消耗&#xff0c;提高軟件的…

每日主題切換網頁:用純前端技術打造隨心情變化的動態界面

&#x1f3a8; 每日主題切換網頁&#xff1a;用純前端技術打造隨心情變化的動態界面 項目地址&#xff1a;https://github.com/hhse/daily-theme-switcher 在線演示&#xff1a;https://hhse.github.io/daily-theme-switcher 這里寫目錄標題&#x1f3a8; 每日主題切換網頁&…