Python 數據分析(一):NumPy 基礎知識

目錄
    • 1. 簡介
    • 2. 使用
      • 2.1 ndarray
      • 2.2 數據類型
      • 2.3 索引與切片
      • 2.4 副本與視圖
      • 2.5 軸的概念
      • 2.6 基本運算
      • 2.7 常用操作

1. 簡介

NumPy(Numerical Python)是一個開源的 Python 科學計算擴展庫,主要用來處理任意維度數組與矩陣,通常對于相同的計算任務,使用 NumPy 要比直接使用 Python 基本數據結構要簡單、高效的多。安裝使用 pip install numpy 命令即可。

2. 使用

2.1 ndarray

ndarray 即 n 維數數組類型,它是一個相同數據類型的集合,以 0 下標為開始進行集合中元素的索引。

創建數組可以使用 NumPy 的 array 方法,具體格式如下:

array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

  • p_object:數組或嵌套的數列

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

  • copy:是否需要復制

  • order:創建數組的樣式,C 為行方向,F 為列方向,A 為任意方向(默認)

  • subok:默認返回一個與基類類型一致的數組

  • ndmin:生成數組的最小維度

當然,還可以使用 arange 方法,下面看一下具體使用示例。

創建數組

看一下如何創建一維數組

import numpy as nparr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array(range(1, 6))
arr3 = np.arange(1, 6)
print (arr1)
print (arr2)
print (arr3)

看一下如何創建多維數組,以二維數組為例

import numpy as nparr = np.array([[1, 2], [3, 4], [5, 6]])
print(arr)

常用屬性

通過示例來看一下 ndarray 對象的常用屬性

import numpy as nparr = np.array([1, 2, 3])
# 元素類型
print(arr.dtype)
# 形狀
print(arr.shape)
# 元素個數
print(arr.size)
# 維度
print(arr.ndim)
# 每個元素大小(字節)
print(arr.itemsize)

改變數組的形狀

import numpy as nparr = np.arange(30)
print(arr)
# 變成二維數組
arr.shape = (5, 6)
print(arr)
# 變成三維數組
arr = arr.reshape((2, 3, 5))
print(arr)
2.2 數據類型

通過下表來看一下 NumPy 的常用數據類型。

類型描述
int_默認的整數類型(類似于 C 語言中的 long,int32 或 int64)
intc與 C 的 int 類型一樣,一般是 int32 或 int 64
intp用于索引的整數類型(類似于 C 的 ssize_t,一般情況下仍然是 int32 或 int64)
int8字節(-128 to 127)
int16整數(-32768 to 32767)
int32整數(-2147483648 to 2147483647)
int64整數(-9223372036854775808 to 9223372036854775807)
uint8無符號整數(0 to 255)
uint16無符號整數(0 to 65535)
uint32無符號整數(0 to 4294967295)
uint64無符號整數(0 to 18446744073709551615)
bool_布爾型數據類型(True 或者 False)
float_float64 類型的簡寫
float16半精度浮點數,包括:1 個符號位,5 個指數位,10 個尾數位
float32單精度浮點數,包括:1 個符號位,8 個指數位,23 個尾數位
float64雙精度浮點數,包括:1 個符號位,11 個指數位,52 個尾數位
complex_complex128 類型的簡寫,即 128 位復數
complex64復數,表示雙 32 位浮點數(實數部分和虛數部分)
complex128復數,表示雙 64 位浮點數(實數部分和虛數部分)

通過示例來看一下如何修改數據類型。

import numpy as nparr1 = np.array([1, 2, 3])
arr2 = np.array([1.111, 2.222, 3.333])
# 當前數據類型
print(arr1.dtype)
# 修改數據類型
arr1 = arr1.astype(np.int64)
print(arr1.dtype)
# 保留一位小數
arr2 = np.round(arr2, 1)
print(arr2)
2.3 索引與切片

NumPy 數組支持索引、切片操作,還可以進行迭代,先看一下一維數組。

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
print(arr[3])
# 修改元素值
arr[3] = 10
print(arr[3])
print(arr[2:])
print(arr[2:4])
print(arr[4:])
for i in arr:print(i)

再看一下多維數組的這些操作。

import numpy as nparr = np.arange(12).reshape(3, 4)
print(arr)
# 取某一個值
print(arr[2, 3])
# 取多個不連續的值
print(arr[[0, 2],[1, 3]])
# 取一行
print(arr[0])
# 連續取多行
print(arr[1:])
# 取不連續的多行
print(arr[[0, 2]])
# 取一列
print(arr[:, 0])
# 連續取多列
print(arr[:, 2:])
# 取不連續的多列
print(arr[:, [0, 2]])
2.4 副本與視圖

視圖(淺復制)只是原有數據的一個引用,通過該引用可訪問、操作原有數據,如果我們對視圖進行修改,它會影響原始數據,因為淺復制共享內存。

副本(深復制)是對數據的完整拷貝,如果我們對副本進行修改,它不會影響到原始數據,因為深復制不共享內存。

調用 ndarray 的 view() 方法會產生一個視圖,下面通過示例來看一下。

import numpy as npa = np.arange(6).reshape(2,3)
# 創建視圖
b = a.view()
print('a的id:', id(a))
print('b的id:', id(b))
# 修改 b 的形狀
b.shape =  3,2
print('a的形狀:')
print(a)
print('b的形狀:')
print(b)
print(a is b)

調用 ndarray 的 copy() 方法會產生一個副本,下面通過示例來看一下。

import numpy as npa = np.arange(1, 6)
# 創建副本
b = a.copy()
print(a is b)
b[1] = 10
print(a[1])
print(b[1])
2.5 軸的概念

NumPy 中的軸簡單來說就是方向的意思,使用數字 0、1、2 表示,一維數組只有 0 軸,二維數組有 0、1 軸,三維數組有 0、1、2 軸,了解軸的相應概念可以方便我們進行相應計算。

2.6 基本運算

數組與數字之間運算

看一下數組與數字之間的加、減、乘、除運算。

import numpy as nparr = np.arange(12).reshape(3, 4)
print(arr + 3)
print(arr - 1)
print(arr * 2)
print(arr / 3)

數組與數組之間運算

看一下數組與數組之間的運算。

import numpy as np# 相同行數,相同列數
a = np.arange(12).reshape(3, 4)
b = np.arange(20, 32).reshape(3, 4)
print(a + b)
print(b * a)
# 相同行數
c = np.arange(12).reshape(3, 4)
d = np.arange(3).reshape(3, 1)
print(c + d)
print(c - d)
# 相同列數
e = np.arange(12).reshape(4, 3)
f = np.arange(3).reshape(1, 3)
print(e * f)
print(e - f)

常用數學運算

import numpy as nparr = np.array([[33, 55], [11, 66], [22, 99]])
print(arr)
# 最大值
print(np.max(arr))
# 最小值
print(np.min(arr))
# 某一軸上的最大值
print(np.max(arr, 1))
# 某一軸上的最小值
print(np.min(arr, 1))
# 平均值
print(np.mean(arr))
# 某一行、一列的平均值
print(np.mean(arr, axis=1))
# 最大值索引
print(np.argmax(arr))
print(np.argmax(arr, axis=1))
# 最小值索引
print(np.argmin(arr))
print(np.argmin(arr, axis=1))
# 極差
print(np.ptp(arr))
print(np.ptp(arr, axis=1))
# 方差
print(np.var(arr))
# 標準差
print(np.std(arr))
# 中位數
print(np.median(arr))
2.7 常用操作

添加操作

NumPy 的 append() 方法可以在數組的末尾添加值,該操作會分配至整個數組,并把原數組復制到新數組,該操作需保證輸入的維度匹配,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 添加元素
print(np.append(arr, [1, 1, 3]))
# 沿 0 軸添加元素
print(np.append(arr, [[1, 1, 3]], axis=0))
# 沿 1 軸添加元素
print(np.append(arr, [[1, 1, 3], [2, 1, 5]], axis=1))

我們還可以使用 insert() 方法進行添加操作,該方法在給定索引前沿給定軸向數組中插入值,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 添加元素
print(np.insert(arr, 1, [1, 1, 3]))
# 沿 0 軸添加元素
print(np.insert(arr, 1, [1, 1, 3], axis=0))
# 沿 1 軸添加元素
print(np.insert(arr, 1, [1, 5], axis=1))

刪除操作

NumPy 的 delete() 可以對數組進行刪除操作,下面看一下使用示例。

import numpy as nparr = np.array([[1, 3, 5], [2, 4, 6]])
# 刪除元素
print(np.delete(arr, 1))
# 沿 0 軸刪除元素
print(np.delete(arr, 1, axis=0))
# 沿 1 軸刪除元素
print(np.delete(arr, 1, axis=1))

去重操作

NumPy 的 unique() 方法可以去除數組中的重復元素。

import numpy as nparr = np.array([1, 3, 5, 2, 4, 6, 1, 5, 3])
# 去除重復元素
print(np.unique(arr))
# 去重數組的索引數組
u, indices = np.unique(arr, return_index=True)
print(indices)
# 去重元素的重復數量
u, indices = np.unique(arr, return_counts=True)
print(indices)

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

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

相關文章

編程與數學 03-002 計算機網絡 04_數據鏈路層功能

編程與數學 03-002 計算機網絡 04_數據鏈路層功能一、數據鏈路層的基本任務(一)封裝成幀(二)差錯控制(三)流量控制二、差錯檢測與糾正方法(一)常用的差錯檢測碼(二&#…

latex中既控制列內容位置又控制列寬,使用>{\centering\arraybackslash}p{0.85cm}

示例:\usepackage{array} % 為 >{...} 修飾符提供支持\begin{table*}[ht!]\centering \begin{tabular}{p{2.8cm} >{\centering\arraybackslash}p{0.85cm} >{\centering\arraybackslash}p{0.85cm} >{\centering\arraybackslash}p{0.85cm} >{\ce…

醫療數據挖掘Python機器學習案例

1. 醫療數據挖掘概述 醫療數據挖掘是從大量的醫療數據中提取有價值信息和知識的過程,旨在輔助醫療決策、疾病預測、治療方案優化等。隨著醫療信息化的發展,電子病歷、醫療影像、基因數據等多源異構數據不斷積累,為醫療數據挖掘提供了豐富的素…

人工智能概述

🌟 歡迎來到AI奇妙世界! 🌟 親愛的開發者朋友們,大家好!👋 我是人工智能領域的探索者與分享者,很高興在CSDN與你們相遇!🎉 在這里,我將持續輸出AI前沿技術、實…

C++性能優化擂臺技術文章大綱

引言性能優化在C開發中的重要性擂臺賽形式的優勢:激發創意,展示不同優化技巧目標讀者:中高級C開發者擂臺賽規則設計統一基準測試環境(硬件、編譯器、優化標志)參賽代碼需通過功能正確性驗證性能指標:執行時…

AI人工智能時代,Bard的智能家政服務助手

AI人工智能時代,Bard的智能家政服務助手 關鍵詞:人工智能、智能家居、Bard助手、機器學習、自然語言處理、物聯網、智能服務 摘要:本文深入探討了AI人工智能時代下,基于Bard技術的智能家政服務助手的實現原理、技術架構和應用場景。我們將從核心技術入手,分析其背后的機器…

MySQL(155)什么是MySQL的事件調度器?

MySQL的事件調度器(Event Scheduler)是一種強大的工具,用于在指定的時間間隔或特定時間點自動執行SQL語句。它類似于操作系統中的任務計劃程序或Cron作業,適用于需要定時執行的任務,如數據歸檔、定期報告生成、定時清理…

【Zephyr開發實踐系列】09_LittleFs文件系統操作

文章目錄前言編寫目的術語和縮寫詞方案選擇一、Littlefs介紹二、Littlefs搭建步驟1.設備樹構建2.自動掛載流程(二選一)2.1設備樹啟用自動掛載2.2 在 littlefs_fs.c 中,設備樹宏會被展開2.3 模塊注冊初始化2.4 初始化階段2.4.1注冊Littlefs文件…

保護板測試儀:守護電池安全的“幕后衛士”

在現代科技飛速發展的今天,電池作為各類電子設備和新能源系統的核心動力源,其安全性與穩定性直接關系到設備的正常運行和使用者的安全。而保護板作為電池的“安全衛士”,承擔著過充保護、過放保護、短路保護等關鍵功能。保護板測試儀則是專門…

【unitrix】 6.11 二進制數字標準化模塊(normalize.rs)

一、源碼 這個模塊實現了類型級別的二進制數標準化處理&#xff0c;確保二進制數在組合時保持最簡形式。 //! 二進制數字標準化模塊 //! //! 提供二進制數字(B<H, L>)的組合前標準化功能&#xff0c;確保數字以最簡形式表示&#xff0c; //! 避免同一數值有不同表示形式。…

解決OpenHarmony中找不到pthread_cancel和pthread_setcanceltype等libc符號的問題

筆者在移植三方庫到OpenHarmony時遇到了pthread_cancel和pthread_setcanceltype函數找不到的問題&#xff0c;將解決辦法分享如下&#xff1a; OpenHarmony的使用的c庫musl中注釋了這些函數的導出&#xff0c;在third_party/musl/libc.map.txt將屏蔽的函數中取消注釋即可

Python編程進階知識之第五課處理數據(matplotlib)

簡介matplotlib 是 Python 中最流行的數據可視化庫之一&#xff0c;它可以創建各種高質量的圖表。無論是簡單的折線圖&#xff0c;還是復雜的 3D 圖形&#xff0c;matplotlib 都能輕松應對。它提供了類似 MATLAB 的繪圖接口&#xff0c;使得用戶可以非常方便地進行圖表的創建和…

rust-所有權

什么是所有權 所有權是一組規則&#xff0c;它決定了 Rust 程序如何管理內存。所有運行中的程序都必須管理它們對計算機內存的使用方式。某些語言使用垃圾回收&#xff08;GC&#xff09;&#xff0c;在程序運行時定期查找不再使用的內存&#xff1b;另一些語言則要求程序員顯式…

破解哈希極化:基于主動路徑規劃的智算網絡負載均衡方案

如今人工智能&#xff08;AI&#xff09;和大模型訓練的蓬勃發展&#xff0c;大規模AI算力集群&#xff08;智算集群&#xff09;已成為關鍵基礎設施。這類集群對網絡性能&#xff0c;特別是高吞吐、低延遲和無損特性有著嚴苛要求&#xff0c;RoCE因此被廣泛應用。然而&#xf…

Vue工程化 ElementPlus

一、Vue工程化1、環境準備create-vue是Vue官方提供的最新的腳手架工具&#xff0c;用于快速生成一個工程化的Vue項目。提供了以下功能&#xff1a;統一的目錄結構本地調試熱部署單元測試集成打包上線依賴環境&#xff1a;Node JS 是一個免費、開源、跨平臺的JavaScript運行時環…

深入解析TCP:可靠傳輸的核心機制與實現邏輯

Linux 系列 文章目錄Linux 系列前言一、TCP協議的概念1.1 TCP協議的特點1.2 TCP又叫做傳輸控制協議二、TCP協議段格式2.1、TCP的流量控制----------窗口大小&#xff08;16位&#xff09;2.2 TCP的確認應答機制2.2.1 什么是確認應答機制2.2.2 確認應答機制的優化2.3 超時重傳機…

通縮浪潮中的 “測量防線”:新啟航如何用國產 3D 白光干涉儀筑牢半導體成本護城河?

一、通縮浪潮下半導體行業的成本困局在通縮浪潮沖擊下&#xff0c;半導體行業面臨市場需求疲軟、產品價格下滑的嚴峻挑戰。為維持競爭力&#xff0c;降低生產成本成為企業生存發展的關鍵。而 3D 白光干涉儀作為半導體晶圓檢測、制程監控的核心設備&#xff0c;傳統進口產品價格…

[網安工具] 自動化威脅檢測工具 —— D 盾 · 使用手冊

&#x1f31f;想了解其它網安工具&#xff1f;看看這個&#xff1a;[網安工具] 網絡安全工具管理 —— 工具倉庫 管理手冊 D盾防火墻D盾,D盾_防火墻,D盾_IIS防火墻,D盾_web查殺,IIS防火墻,webshell查殺,https://www.d99net.net/ 0x01&#xff1a;D 盾 —— 工具簡介 D 盾防火…

Spring AI 系列之二十二 - ImageModel

之前做個幾個大模型的應用&#xff0c;都是使用Python語言&#xff0c;后來有一個項目使用了Java&#xff0c;并使用了Spring AI框架。隨著Spring AI不斷地完善&#xff0c;最近它發布了1.0正式版&#xff0c;意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

Redis集群高可用與性能優化實戰指南

Redis集群高可用與性能優化實戰指南 一、業務場景描述 在大型分布式系統中&#xff0c;Redis不僅承擔緩存職責&#xff0c;還常用于限流、排行榜、會話管理等高并發場景。隨著訪問量的激增和集群規模的擴展&#xff0c;如何保證Redis服務的高可用性與高性能&#xff0c;成為后端…