【numpy基礎】--結構化

来源:https://www.cnblogs.com/wang_yb/archive/2023/07/06/17532130.html
-Advertisement-
Play Games

目前為止,介紹的`numpy`數組基本都是關於數值的,其實,`numpy`本身就是一個用於數值計算的基礎庫。 不過,除了數值計算之外,`numpy`也能夠支持**結構化數組**。 # 1. 關聯不同類型數據 `numpy`的數組為了提高計算性能,要求數組的數據類型要一致。但是現實情況下,我們經常遇到 ...


目前為止,介紹的numpy數組基本都是關於數值的,其實,numpy本身就是一個用於數值計算的基礎庫。

不過,除了數值計算之外,numpy也能夠支持結構化數組

1. 關聯不同類型數據

numpy的數組為了提高計算性能,要求數組的數據類型要一致。
但是現實情況下,我們經常遇到不是純數值的數組,比如:

name = ["harry", "tom", "annie"]
sex = ["male", "male", "female"]
age = [40, 31, 14]

arr = np.array([name, sex, age])
print(arr)
#運行結果
[['harry' 'tom' 'annie']
 ['male' 'male' 'female']
 ['40' '31' '14']]

上面三個數組的類型不一致,放到一個numpy數組中時,可以看出,age數組被自動轉換為字元串類型了。

為了保持 age 數組的原有數據類型,就要用到numpy結構化數組了。

arr = np.zeros(
    3,
    dtype={"names": ("name", "sex", "age"), 
           "formats": ("U10", "U10", "i4")},
)
print(arr)
#運行結果
[('', '', 0) ('', '', 0) ('', '', 0)]

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#運行結果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

定義數組時,定義不同的namesformats,這樣,最後得到了結構化的數組,每個元素是一個元組元組中的三個元素分別是namesexage

這樣的數組,保持了原數組的數據的類型。
補充:上面代碼中的 U10 表示長度小於10 的字元串,i4 表示占4個位元組的整數。

2. 結構化數組

生成結構化數組的關鍵在於定義不同的數據類型。
定義數據了類型有兩種方式:
第一種是用字典,類似上面的示例那樣,

dtp = np.dtype(
    {"names": ("name", "sex", "age"), 
     "formats": ("U10", "U10", "i4")}
)
arr = np.zeros(3, dtype=dtp)

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#運行結果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

還有一種方式是用元組列表來定義:

dtp = np.dtype([
    ("name", "U10"), 
    ("sex", "U10"),
    ("age", "i4")
])
arr = np.zeros(3, dtype=dtp)

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#運行結果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

兩種方式定義出的結構化數組是一樣的。

3. 更複雜的結構

除了定義上面那種類似excel表格的二維結構之外,numpy的數組也能定義跟複雜的結構。
比如定義學生的成績列表:

dtp = np.dtype([("name", "U10"), ("scores", "f4", (3))])
arr = np.zeros(3, dtype=dtp)
print(arr)
#運行結果
[('', [0., 0., 0.]) 
 ('', [0., 0., 0.]) 
 ('', [0., 0., 0.])]

arr["name"] = ["harry", "tom", "annie"]
arr["scores"] = [[100, 95.5, 93], [89, 90, 78.5], [77.5, 76, 90]]
print(arr)
#運行結果
[('harry', [100. ,  95.5,  93. ]) 
 ('tom', [ 89. ,  90. ,  78.5])
 ('annie', [ 77.5,  76. ,  90. ])]

每個學生對應一個成績列表,列表中包含3個成績。

4. 總結回顧

總的來說,numpy結構化數組並不常用,對於結構化數組,使用 pandas庫來操作更好。
numpy庫一般作為純數值計算的底層來使用,其實pandas也是基於 numpy 的。

此外,還有很多其他的python科學計算的庫也是基於numpy的。


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

-Advertisement-
Play Games
更多相關文章
  • 一般發生在程式開始部分: `from pymodbus.client.sync import ModbusSerialClient` `from pymodbus.payload import BinaryPayloadDecoder` `from pymodbus.constants import ...
  • # Java 構造器 # 1. 構造器 ## 構造器也叫構造方法,是用來完成對象的初始化。 ## 構造器的定義: > ## 構造器的定義:[訪問修飾符] 方法名(形參),構造器與方法不同,並沒有返回值,也不能寫void,訪問修飾符可以是不同的,方法名要與本類的類名相同 > > ## 構造器的調用是由 ...
  • ### 1 .讓自己習慣C++ #### 條款01 視C++為一個語言聯邦 * `C` * `Object-Oriented C++` * `Template C++` * `STL` * `C++`高效編程守則視情況而變化,取決於你使用`C++`的哪一部分。 #### 條款02 儘量與const, ...
  • **startswith()方法** startswith() 方法用於檢索字元串是否以指定字元串開頭,如果是返回 True;反之返回 False。 **endswith()方法** endswith() 方法用於檢索字元串是否以指定字元串結尾,如果是則返回 True;反之則返回 False ``` ...
  • ### 1.os.system() os.system() 是對 C 語言中 system() 系統函數的封裝,允許執行一條命令,並返回退出碼(exit code),命令輸出的內容會直接列印到屏幕上,無法直接獲取。 示例: ```python # test.py import os os.syste ...
  • 哈嘍大家好,我是鹹魚 當我們說 Python 時,通常指的是官方實現的 CPython 但還有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python” 許多小伙伴看到這些帶 “python” 的概念可能一頭霧水,心想這跟我平時接觸到的 py ...
  • # ServletContext對象 **每一個 web 應用都有且僅有一個 ServletContext 對象**,又稱為 Application 對象,從名稱中可知,該對象是與應用程式相關的。在WEB 容器啟動時,會為每一個 WEB 應用創建一個對應的 ServletContex對象。 **該對 ...
  • 當初剛開始學單鏈表學的是一頭霧水,簡直就是徹頭徹尾災難,一塌糊塗,過段時間後經過自己的重新認真思考再結合小練習明白了它是怎麼個回事兒。 1、首先從它的邏輯上入手,對他有大體認知。 簡單來說就是一個一個有方向小塊兒連在一起,好像疫情期間大家排隊做核酸,都朝著醫護人員那個方向,醫護人員會從第一個開始數有 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...