大二下期末

一.Numpy(Numerical Python)

Numpy庫是Python用于科學計算的基礎包,也是大量Python數學和科學計算包的基礎。不少數據處理和分析包都是在Numpy的基礎上開發的,如后面介紹的Pandas包。

Numpy的核心基礎是ndarray(N-dimensional array ,n維數組),即由數據類型相同的元素組成N維數組。

1.創建數組

1.利用array函數創建

import numpy as np
d1 = [1,2,3,4,0.1,7]
d2 = (1,3,5,7,9)
d3 = [(1,2),(3,4),[5,6]]
n1 = np.array(d1)
n2 = np.array(d2)
n3 = np.array(d3)
print(n1)
print(n2)
print(n3)

輸出:

[1. ?2. ?3. ?4. ?0.1 7. ]
[1 3 5 7 9]
[[1 2]
?[3 4]
?[5 6]]

print(n1.dtype)
print(n2.dtype)
print(n3.dtype)

輸出:

float64
int64
int64

可以看出數組n1中的數據類型是浮點數,這是因為numpy會進行類型強制轉換,轉換規則為:str > float > int? ? ?只要原始數據中有一個類型“較高級”的數據,由這個原始數據創建的數組里面的元素就會開始強制轉換類型

float64是一種浮點數類型,表示雙精度浮點數,它占用64位(8字節)的存儲空間

int64是一種整數類型,表示64位有符號整數。用于存儲整數,能夠表示的整數的范圍為負2的63次方到正2的63次方減一,適用于需要處理較大范圍的整數場景

還有其他的類型可以上網查(感嘆現在的artifical intelligence)

另外有一個類型值得注意:object類型,稱為對象類型,可以存儲任何Python對象

2.利用內置函數創建數組

import numpy as np
z1 = np.zeros((3,4))
z2 = np.ones((2,3))
z3 = np.arange(1,10)
z4 = np.arange(1,10,2)
z5 = np.arange(10)

輸出:(省略了print)

[[0. 0. 0. 0.]
?[0. 0. 0. 0.]
?[0. 0. 0. 0.]]
[[1. 1. 1.]
?[1. 1. 1.]]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]
[0 1 2 3 4 5 6 7 8 9]

2.數組的屬性

1. ndarray.shape

表示數組的維度大小(形狀),返回一個元組,其中每一個元素對應了一個維度的大小

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

輸出:(2,3)

2.ndarray.ndim

用于獲取數組的維度(dimension)

3.ndarray.size

表示數組中元素總個數

4.ndarray.dtype

表示數組中的元素類型

5.ndarray,itemsiez

表示數組中每個元素所占的字節數

print(arr.itemsize)

輸出:8

6.ndarray.nbytes

表示數組占用的字節總數

print(arr.nbytes)

輸出:48

7.ndarray.T

表示數組的轉置(行變成列,列變成行)

8.ndarray.real

獲取數組中元素的實部

9.ndarray.imag

獲取數組中元素的虛部

10.ndarray.flags? ndarray.strides? ndarray.data

這三個屬性不常用,用到了再了解

3.數組的reshape函數

reshape本身就有重塑,改造的意思(shape 形狀,塑造)

reshape函數用于在不改變數組數據的情況下,重新調整數組的形狀,只要新形狀的總數據量和原來形狀的總數據量一致就行

在reshape方法中,-1參數可以讓Numpy自動計算維度的大小,即根據數組中元素的總個數和其他維度的大小自動推導出該維度的大小。注意:當使用reshape方法時,只有一個維度大小可以設置成-1

4.數組中的視圖(view)和副本(copy)

在Numpy中,視圖和副本是是兩種不同的數組操作方式,它們在數據存儲和內存管理上有顯著的區別

1.視圖(view)

視圖是原數組的一種“窗口”,它并不創建新的數據存儲,而是直接引用原數組的內存,對視圖的修改會直接影響原數組

1.視圖創建方式

使用切片操作[:]

使用reshape方法

使用transpose方法(轉置)

2.視圖的特點

不會占用額外的內存空間

修改視圖中的數據會影響到原數組中的數據

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
view = arr.reshape((2, 3))  # 創建視圖print("Original array:", arr)
print("View array:", view)# 修改視圖
view[0, 0] = 100print("Modified original array:", arr)
print("Modified view array:", view)

輸出:

Original array: [1 2 3 4 5 6]
View array: [[1 2 3]
? ? ? ? ? ? ?[4 5 6]]
Modified original array: [100 ? 2 ? 3 ? 4 ? 5 ? 6]
Modified view array: [[100 ? 2 ? 3]
? ? ? ? ? ? ? ? ? ? ? [ ?4 ? 5 ? 6]]

2.副本(copy)

副本是原數組的一個完整拷貝,它在內存中創建了新的數據存儲。對副本的修改不會影響原數組

1.副本的創建方式

使用.copy()方法

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])
copy = arr.reshape((2, 3)).copy()  # 創建副本print("Original array:", arr)
print("Copy array:", copy)# 修改副本
copy[0, 0] = 100print("Modified original array:", arr)
print("Modified copy array:", copy)

輸出:

Original array: [1 2 3 4 5 6]
Copy array: [[1 2 3]
? ? ? ? ? ? ?[4 5 6]]
Modified original array: [1 2 3 4 5 6]
Modified copy array: [[100 ? 2 ? 3]
? ? ? ? ? ? ? ? ? ? ? [ ?4 ? 5 ? 6]]

3.如何判斷一個數組是視圖還是副本

使用ndarray.flags屬性

如果OWNDATA=True 表示數組是副本,擁有自己的內存

如果OWNDATA=False 表示數組是視圖,引用了其他數組的內存

5.可以使用astype方法修改數組的數據類型

ndarray.astype(dtype)

其中dtype表示要轉換的數據類型

6.數組運算

基礎的加減乘除乘方就不說了

np.srqt(ndarray)

np.abs(ndarray)

np.cos(ndarray)

np.sin(ndarray)

np.exp(ndarray)

7.數組的切片

看前面的文章

8.數組的連接

1.numpy.concatenate()

參數axis=0表示垂直拼接,axis=1表示水平拼接

2.numpy.vstack()

Vertical 垂直的

3.numpy.hstack()

Horizontal 水平的

注意:水平連接要求數組之間行數一致,垂直連接要求數組之間列數一致

import numpy as npnp.random.seed(42) # 設置隨機數種子
n1 = np.random.randint(1,10,size=(2,3))
n2 = np.random.randint(2,20,size=(3,3))
n3 = np.random.randint(3,30,size=(2,4))print(np.concatenate((n1,n2),axis=0)) # 垂直拼接
print(np.concatenate((n1,n3),axis=1)) # 水平拼接

輸出:

[[ 7 ?4 ?8]
?[ 5 ?7 ?3]
?[12 12 ?5]
?[ 9 ?4 ?3]
?[13 ?7 ?3]]
[[ 7 ?4 ?8 23 ?3 14 28]
?[ 5 ?7 ?3 24 14 27 19]]

print(np.vstack([n1,n2])) # 垂直拼接
print(np.hstack((n1,n3))) # 水平拼接

輸出:

[[ 7 ?4 ?8]
?[ 5 ?7 ?3]
?[12 12 ?5]
?[ 9 ?4 ?3]
?[13 ?7 ?3]]
[[ 7 ?4 ?8 23 ?3 14 28]
?[ 5 ?7 ?3 24 14 27 19]]

9.數組形態的轉換

1.numpy.ravel()

將多維數組展平成一維數組

ravel_n1 = np.ravel(n1) # 展平
print(ravel_n1)

輸出:

[7 4 8 5 7 3]

2.numpy.flatten()

將多維數組展平成一維數組

flatten_n2 = n2.flatten()
print(flaten_n2)

輸出:

[12 12 ?5 ?9 ?4 ?3 13 ?7 ?3]

3.ndarray.reshape(-1)

reshape_n3 = n3.reshape(-1)
print(reshape_n3)  # 展平,-1表示自動計算維度

輸出:

[23 ?3 14 28 24 14 27 19]

二.Pandas

Pandas是基于Numpy開發的一個Python包。Pandas作為Python數據分析的核心包,提供了大量數據分析的函數,包括數據處理,數據抽取,數據集成,數據計算等基本數據分析手段。

Pandas核心數據結構包括序列和數據框。序列存儲一維數據,而數據框可以存儲更復雜的多維數據

1.數據框DataFrame的拼接

1.concat函數

import pandas as pd
import numpy as np
np.random.seed(42)
df1 = pd.DataFrame(data=np.random.randint(1,10,size=(3,2)))
df2 = pd.DataFrame(data=np.random.randint(1,10,size=(3,4)))
df3 = pd.DataFrame(data=np.random.randint(1,10,size=(4,2)))
print(df1)
print()
print(df2)
print()
print(df3)# 按列拼接,axis=1,即按列對齊,也就是列索引對齊,還可以理解為橫向拼接
print(pd.concat([df1,df2],axis=1))
print()
print(pd.concat([df1,df2],axis=1,ignore_index=True))  # 忽略索引,重新生成索引
print()
# 按行拼接,axis=0,即按行對齊,也就是行索引對齊,還可以理解為縱向拼接
print(pd.concat([df1,df3],axis=0))

輸出:

? 0 ?1
0 ?7 ?4
1 ?8 ?5
2 ?7 ?3

? ?0 ?1 ?2 ?3
0 ?7 ?8 ?5 ?4
1 ?8 ?8 ?3 ?6
2 ?5 ?2 ?8 ?6

? ?0 ?1
0 ?2 ?5
1 ?1 ?6
2 ?9 ?1
3 ?3 ?7
? ?0 ?1 ?0 ?1 ?2 ?3
0 ?7 ?4 ?7 ?8 ?5 ?4
1 ?8 ?5 ?8 ?8 ?3 ?6
2 ?7 ?3 ?5 ?2 ?8 ?6

? ?0 ?1 ?2 ?3 ?4 ?5
0 ?7 ?4 ?7 ?8 ?5 ?4
1 ?8 ?5 ?8 ?8 ?3 ?6
2 ?7 ?3 ?5 ?2 ?8 ?6

? ?0 ?1
0 ?7 ?4
1 ?8 ?5
2 ?7 ?3
0 ?2 ?5
1 ?1 ?6
2 ?9 ?1
3 ?3 ?7

到現在,對一些函數的參數axis有了一點新的理解:

axsi=0,表示對行進行操作,比如使用concat函數時設置axis=0表示按行拼接,就是把數據一行一行接上去,即垂直連接

axis=1則表示對列進行操作,使用concat函數時設置axis=1表示按列拼接,就是把數據一列一列接上去,即水平連接

三.Matplotlib.pyplot

1.plt.pie()

import matplotlib.pyplot as plt
import numpy as npplt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,10))sales_data = [100,102,140,149,120]
fruit_labels = ['西瓜','蘋果','香蕉','菠蘿','橘子']plt.subplot(2,3,1)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%')
plt.title("水果銷售占比分析圖")plt.subplot(2,3,2)
plt.bar(fruit_labels,np.array(sales_data))
for x,y in enumerate(sales_data):plt.text(x-0.3,y+1,str(y),color='r')
plt.grid(alpha=0.5)
plt.title("水果銷售數量柱狀圖")
plt.xlabel('水果種類')
plt.ylabel('銷售數量')plt.subplot(2,3,3)
def my_autopct_func(percentage,all_values):absolute = round(percentage / 100 * sum(all_values))return f"{percentage:.1f}%\n({absolute}份)"
plt.pie(sales_data,autopct=lambda pct:my_autopct_func(pct,sales_data),labels=fruit_labels)
plt.title("水果銷售占比分析")plt.subplot(2,3,4)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%',startangle=90,explode=(0,0.1,0.2,0.3,0.4))
plt.title("水果銷售占比分析")plt.subplot(2,3,5)
plt.pie(sales_data,labels=fruit_labels,autopct='%1.2f%%',startangle=180,explode=(0,0.01,0.05,0.1,0.15),shadow={'ox':-0.04,'oy':0.04,'edgecolor':'none','shade':0.5,'alpha':0.7})plt.tight_layout()
plt.show()

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

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

相關文章

D3ctf-web-d3invitation單題wp

#注入 #用kali構造憑證訪問MinIO服務器 #用mc帶臨時憑證訪問遠程Minion的儲存桶 還有一個 minio 服務的api,我們后面要用 /static/js/tools.js function generateInvitation(user_id, avatarFile) {if (avatarFile) {object_name avatarFile.name;genSTSCreds(ob…

基于 Vue 和 Spring Boot 實現滑塊驗證碼的機器驗證

基于 Vue 和 Spring Boot 實現滑塊驗證碼的機器驗證 需求概述技術選型前端實現1. 引入組件2. 修改后端請求URL3. 新增機器驗證頁面4.首頁調用驗證組件 后端實現流程梳理具體實現1. 引入依賴2. 增加yml配置3. 代碼實現4.跨域配置(可選) 實現效果二次驗證的…

[Java惡補day13] 53. 最大子數組和

休息了一天,開始補上! 給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 子數組是數組中的一個連續部分。 示例 1: 輸入:nums …

sql server如何創建表導入excel的數據

在 SQL Server 中,可以通過幾種方式將 Excel 數據導入到數據庫表中。下面是一個完整的流程,包括如何創建表,以及將 Excel 數據導入該表的方法: ? 方法一:使用 SQL Server Management Studio (SSMS) 的導入向導&#x…

C++單例模式教學指南

C單例模式完整教學指南 📚 目錄 [單例模式基礎概念][經典單例實現及問題][現代C推薦實現][高級話題:雙重檢查鎖][實戰應用與最佳實踐][總結與選擇指南] 1. 單例模式基礎概念 1.1 什么是單例模式? 單例模式(Singleton Pattern&…

使用xdocreport導出word

之前java總用freemaker進行導出&#xff0c;但是改xml實在是太繁瑣了&#xff0c;這次找了另一個工具進行體驗. 一、簡單導出 pom引入 <dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.xdocreport.core</arti…

vscode里如何用git

打開vs終端執行如下&#xff1a; 1 初始化 Git 倉庫&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 倉庫 git add . 3 使用 git commit 命令來提交你的更改。確保在提交時加上一個有用的消息。 git commit -m "備注信息" 4 …

C++.OpenGL (2/64)你好,三角形(Hello Triangle)

你好,三角形(Hello Triangle) 繪制流程概覽 #mermaid-svg-MvIGIovxiuKVfzy8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MvIGIovxiuKVfzy8 .error-icon{fill:#552222;}#mermaid-svg-MvIGIovxiuKVfzy8 .error…

汽車安全體系:FuSa、SOTIF、Cybersecurity 從理論到實戰

汽車安全&#xff1a;功能安全&#xff08;FuSa&#xff09;、預期功能安全&#xff08;SOTIF&#xff09;與網絡安全(Cybersecurity) 從理論到實戰的安全體系 引言&#xff1a;自動駕駛浪潮下的安全挑戰 隨著自動駕駛技術從L2向L4快速演進&#xff0c;汽車安全正從“機械可靠…

N2語法 列挙、話題提出

1&#xff0c;&#xff5e;やら&#xff5e;やら  接続&#xff1a;名詞、辭書形  意味&#xff1a;…啦…啦&#xff08;列舉代表性的事物&#xff09;  例文&#xff1a;     家に帰って料理やら洗濯やら何もしなければならない。     帰國前、買い物やら荷造りや…

深入理解React Hooks的原理與實踐

深入理解React Hooks的原理與實踐 引言 React Hooks 自 2018 年 React 16.8 發布以來&#xff0c;徹底改變了前端開發者的編碼方式。它通過函數式組件提供了狀態管理和生命周期等功能&#xff0c;取代了傳統的類組件&#xff0c;使得代碼更加簡潔、復用性更強。然而&#xff…

RockyLinux9.6搭建k8s集群

博主介紹&#xff1a;?全網粉絲5W&#xff0c;全棧開發工程師&#xff0c;從事多年軟件開發&#xff0c;在大廠呆過。持有軟件中級、六級等證書。可提供微服務項目搭建與畢業項目實戰&#xff0c;博主也曾寫過優秀論文&#xff0c;查重率極低&#xff0c;在這方面有豐富的經驗…

鏈游技術破壁:NFT資產確權與Play-to-Earn經濟模型實戰

鏈游技術破壁&#xff1a;NFT資產確權與Play-to-Earn經濟模型實戰 ——從「投機泡沫」到「可持續生態」的技術重構 一、NFT確權技術革新&#xff1a;從鏈上存證到動態賦權 跨鏈確權架構 全鏈互操作協議&#xff1a;采用LayerZero協議實現以太坊裝備與Solana土地的跨鏈組合&…

Java下載文件(特殊字符編碼處理)

當你在這個問題上花費了數小時而解決不了&#xff0c;你才會知道這篇文章對你的幫助 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.http.HttpEntity; import org.springframewo…

TDengine 高級功能——讀緩存

簡介 在物聯網&#xff08;IoT&#xff09;和工業互聯網&#xff08;IIoT&#xff09;大數據應用場景中&#xff0c;實時數據的價值往往遠超歷史數據。企業不僅需要數據處理系統具備高效的實時寫入能力&#xff0c;更需要能快速獲取設備的最新狀態&#xff0c;或者對最新數據進…

YOLO在C#中的完整訓練、驗證與部署方案

YOLO在C#中的完整訓練、驗證與部署方案 C# 在 YOLO 部署上優勢明顯&#xff08;高性能、易集成&#xff09;&#xff0c;但訓練能力較弱&#xff0c;通常需結合 Python 實現。若項目對開發效率要求高且不依賴 C# 生態&#xff0c;建議全程使用 Python&#xff1b;若需深度集成…

pikachu靶場通關筆記17 CSRF關卡03-CSRF(Token)

目錄 一、CSRF原理 二、CSRF Token 三、源碼分析 四、CSRF Token tracker插件 1、插件簡介 2、插件安裝 五、滲透實戰 1、用戶登錄 2、修改個人信息 3、bp攔截報文 4、bp改報文探測 5、配置CSRF-Token-Tracer 6、bp改包成功 7、查看CSRF Token Tracker配置 本系…

C#面試問題81-100

85. What are anonymous types? 匿名類型是在需要的地方直接定義的類型&#xff0c;甚至都 不給它命名。它非常適合我們這種用例——類型小且臨時&#xff0c;而且我們無意在其 他地方使用它 匿名類型是直接從 System.Object 派生的類對象。它們不能轉換為任何 其他類型。●…

【Ragflow】25.Ragflow-plus開發日志:excel文件解析新思路/公式解析適配

引言 RagflowPlus v0.3.0 版本中&#xff0c;增加了對excel文件的解析支持&#xff0c;但收到反饋&#xff0c;說效果并不佳。 以下測試文件內容來自群友反饋提供&#xff0c;數據已脫敏處理。 經系統解析后&#xff0c;分塊效果如下&#xff1a; 可以看到&#xff0c;由于該…

VS2022下C++ Boost庫安裝與使用使用

一.Boost概述 1.簡介 Boost 是一個廣泛使用的 C 庫集合&#xff0c;提供了許多高質量、可移植、高效的工具和組件&#xff0c;被視為 C 標準庫的延伸。自 1998 年成立以來&#xff0c;Boost 已成為 C 社區的核心資源&#xff0c;許多 Boost 庫通過實踐驗證后被納入 C 標準&am…