Python 商務數據分析—— NumPy 學習筆記Ⅰ

一、NumPy 簡介

1.1 NumPy 特性

  • 高性能科學計算庫:專為處理多維數組設計,底層用 C 語言實現,運算速度遠超 Python 原生列表。
  • 矢量運算:支持批量數據操作,避免顯式循環,代碼更簡潔高效。
  • 廣播機制:自動處理不同形狀數組間的運算。
  • 豐富函數庫:包含線性代數、傅里葉變換、隨機數等功能。

1.2 應用場景

  • 數據分析:處理大規模結構化數據。
  • 機器學習:作為 TensorFlow/PyTorch 等框架的底層支持。
  • 科學計算:物理模擬、統計學分析。
  • 圖像處理:多維數組表示像素數據。

1.3 安裝與導入

pip install numpyimport numpy as np

二、NumPy 基礎 —— 數組對象

2.1 數組與列表對比

特性

NumPy 數組 (ndarray)

Python 列表 (list)

數據類型

元素類型必須一致

可包含任意類型元素

內存存儲

連續內存空間,訪問速度快

非連續存儲,訪問較慢

運算效率

支持向量化運算,速度快

需顯式循環,速度慢

維度支持

支持 n 維數組

僅支持一維結構

2.2 創建數組的四種方式

方法

語法

示例

np.array()

從列表 / 元組創建

arr1 = np.array([10, 20, 30, 40])

np.arange()

生成等差數列

arr2 = np.arange(0, 10, 2)

np.random

生成隨機數組

arr3 = np.random.random((2, 3))

特殊函數

zeros/ones/full/eye

arr_zeros = np.zeros((3, 3))

代碼示例
通過np.array創建數組
import numpy as np
a = np.array([1, 2, 3, 4])
print(a)  # 輸出結果: [1 2 3 4]
通過np.arange創建數組
import numpy as np
a = np.arange(0, 10, 2)  # 創建0-10,步數為2的數組
print(a)  # 輸出結果: [0 2 4 6 8]
通過np.random.random創建數組
import numpy as np
a = np.random.random((2, 3))
print(a)  # 輸出類似于: [[0.04631855 0.21257259 0.73199394]#          [0.59865848 0.15601864 0.15599452]]
通過特殊函數創建數組
import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零數組
array_ones = np.ones((4, 4))   # 4行4列全一數組
array_full = np.full((2, 3), 9)  # 值為9的2行3列數組
array_eye = np.eye(4)  # 生成一個在斜方形上元素為1,其他元素都為0的4行4列矩陣
print(array_zeros)  # 輸出: [[0. 0. 0.]#               [0. 0. 0.]#               [0. 0. 0.]]
print(array_ones)  # 輸出: [[1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]]
print(array_full)  # 輸出: [[9 9 9]#                [9 9 9]]
print(array_eye)  # 輸出: [[1. 0. 0. 0.]#               [0. 1. 0. 0.]#               [0. 0. 1. 0.]#               [0. 0. 0. 1.]]

三、數組數據類型

3.1 核心數據類型

類型

描述

標識符

示例

bool

布爾值

b

True/False

int8

1 字節整數

i1

-128~127

int32

4 字節整數

i4

-2147483648~2147483647

float16

半精度浮點數

f2

16 位,精度約 3 位小數

float64

雙精度浮點數

f8

標準浮點數

object

Python 對象

O

存儲類實例等

3.2 類型操作

查詢數據類型

import numpy as npclass Person:  # 定義Person類def __init__(self, name, age):self.name = nameself.age = agezs = Person('張三', 18)  # 產生對象
ls = Person('李四', 20)
d = np.array([zs, ls])
print(d)  # 輸出: [__main__.Person object at 0x00000176CB4F2208 __main__.Person object at 0x00000176CB4F2288]
print(d.dtype)  # 輸出: dtype('O')

創建數組指定數據類型

import numpy as np
a = np.array([1, 2, 3, 4, 5], dtype='int32')  # 使用dtype指定創建數組的數據類型
print(a)  # 輸出結果: [1 2 3 4 5]
print(a.dtype)  # 輸出: int32

修改數據類型

import numpy as np
a = np.array([1, 2, 3, 4, 5])
f = a.astype('float16')  # 使用astype改變數組的數據類型
print(f.dtype)  # 輸出結果: float16

四、多維數組操作

4.1 維度與形狀

數組

維度 (ndim)

形狀 (shape)

含義

[1,2,3]

1

(3,)

一維數組,3 個元素

[[1,2],[3,4]]

2

(2,2)

2 行 2 列二維數組

[[[1,2],[3,4]],[[5,6],[7,8]]]

3

(2,2,2)

3 維數組,2 個 2x2 矩陣

4.2 基本操作

數組維度查詢

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.ndim)  # 輸出: 1
print(a2.ndim)  # 輸出: 2
print(a3.ndim)  # 輸出: 3

數組形狀查詢

import numpy as np
a1 = np.array([1, 2, 3])
a2 = np.array([[1, 2, 3], [4, 5, 6]])
a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(a1.shape)  # 輸出: (3,)
print(a2.shape)  # 輸出: (2, 3)
print(a3.shape)  # 輸出: (2, 2, 3)

修改數組形狀

import numpy as np
a1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
a2 = a1.reshape((2, 6))  # reshape是將數組轉換成指定的形狀,然后返回轉換后的結果,原數組的形狀不會發生改變
print(a2)  # 輸出: [[ 1  2  3  4  5  6]#          [ 7  8  9 10 11 12]]
print(a1.shape)  # 輸出: (4, 3)
a1.resize((4, 3))  # resize是將數組轉換成指定的形狀,會直接修改數組本身,并且不會返回任何值
print(a1)  # 輸出: [[1 2 3]#          [4 5 6]#          [7 8 9]#          [10 11 12]]

通過特殊函數創建數組

import numpy as np
array_zeros = np.zeros((3, 3))  # 3行3列全零數組
array_ones = np.ones((4, 4))   # 4行4列全一數組
array_full = np.full((2, 3), 9)  # 值為9的2行3列數組
array_eye = np.eye(4)  # 生成一個在斜方形上元素為1,其他元素都為0的4行4列矩陣
print(array_zeros)  # 輸出: [[0. 0. 0.]#               [0. 0. 0.]#               [0. 0. 0.]]
print(array_ones)  # 輸出: [[1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]#               [1. 1. 1. 1.]]
print(array_full)  # 輸出: [[9 9 9]#                [9 9 9]]
print(array_eye)  # 輸出: [[1. 0. 0. 0.]#               [0. 1. 0. 0.]#               [0. 0. 1. 0.]#               [0. 0. 0. 1.]]

4.3 素組索引

下標索引

import numpy as np
a = np.arange(6)  # 一維數組
print(a)  # 輸出: [0 1 2 3 4 5]
print(a[2])  # 輸出: 2
print(a[-2])  # 輸出: 4(從后往前數第2個)a = np.arange(9).reshape(3, 3)  # 二維數組
print(a)  # 輸出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[0][1])  # 輸出: 1
print(a[0, 1])  # 輸出: 1

切片索引

import numpy as np
a = np.arange(6)  # 一維數組
print(a)  # 輸出: [0 1 2 3 4 5]
print(a[1:5])  # 輸出: [1 2 3 4]
print(a[1:5:2])  # 輸出: [1 3]
print(a[::2])  # 輸出: [0 2 4]
print(a[::-1])  # 輸出: [5 4 3 2 1 0]a = np.arange(9).reshape(3, 3)  # 二維數組
print(a)  # 輸出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[1:3, 1:2])  # 輸出: [[4]#               [7]]
print(a[1, :])  # 輸出: [3 4 5]
print(a[1, ...])  # 輸出: [3 4 5]
print(a[:, 1])  # 輸出: [1 4 7]

花式索引

import numpy as np
a = np.arange(6)  # 一維數組
print(a)  # 輸出: [0 1 2 3 4 5]
print(a[[1, 2, 5]])  # 輸出: [1 2 5]
print(a[np.array([(0, 1, 3), (1, 4, 5)])])  # 輸出: [[0 1 3]#                [1 4 5]]a = np.arange(9).reshape(3, 3)  # 二維數組
print(a)  # 輸出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a[[1, 0]])  # 輸出: [[3 4 5]#                [0 1 2]]
print(a[[0, 2], 1])  # 輸出: [1 7]
print(a[np.ix_([0, 1], [0, 1])])  # 輸出: [[0 1]#                [3 4]]

布爾索引

import numpy as np
a = np.arange(6)  # 一維數組
print(a)  # 輸出: [0 1 2 3 4 5]
print(a > 3)  # 輸出: [False False False False  True  True]
print(a[a > 3])  # 輸出: [4 5]a = np.arange(9).reshape(3, 3)  # 二維數組
print(a)  # 輸出: [[0 1 2]#          [3 4 5]#          [6 7 8]]
print(a > 3)  # 輸出: [[False False False]#               [False  True  True]#               [ True  True  True]]
print(a[a > 3])  # 輸出: [4 5 6 7 8]

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

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

相關文章

中州養老:搭建環境(第二節)

目錄 項目初始工程搭建: 不同項目需要的前后端環境也不同 前端項目搭建: 熟悉模塊的方式 代碼閱讀 如何開發一個接口 Swagger(接口文檔) Api注解的說明 ???????項目初始工程搭建: 公司項目分兩種,新立項目(0-1)和已有項目開發(1-2) 熟悉項目結構,每個模塊對應的…

[1-01-01].第78節:Java8新特性 - Lambda表達式

java基礎語法大綱 一、Lambda 表達式 1.1.概述: 1.Lambda 是一個匿名函數,我們可以把 Lambda 表達式理解為是一段可以傳遞的代碼(將代碼像數據一樣進行傳遞)2.使用Lambda 表達式可以寫出更簡潔、更靈活的代碼。作為一種更緊湊的…

【2025.6.27 校內 NOI 模擬賽】總結(貪心, 容斥、組合計數, dsu on tree、 虛樹)

文章目錄 時間安排反思題解[六省聯考 2017] 期末考試(貪心, 枚舉)[JSOI2019] 神經網絡(容斥, 組合計數, 樹背包)[ZJOI2019] 語言(dsu on tree, 虛樹, 結論&am…

實際前端開發中,常用指令的封裝

實際前端開發中,常用指令的封裝 全局指令處理步驟main.ts指令目錄結構src/directives/index.ts 一、輸入框空格禁止指令1、指令文件clearSpace.ts2、指令使用 全局指令處理步驟 main.ts import { createApp } from "vue"; import App from "./App.…

鴻蒙OH南向開發 輕量系統內核(LiteOS-M)【異常調測】

基本概念 OpenHarmony LiteOS-M提供異常接管調測手段,幫助開發者定位分析問題。異常接管是操作系統對運行期間發生的異常情況進行處理的一系列動作,例如打印異常發生時異常類型、發生異常時的系統狀態、當前函數的調用棧信息、CPU現場信息、任務調用堆棧…

算法-堆排序

文章目錄 整體架構流程技術細節小結 整體架構流程 大頂推:是構建一個完整的二叉樹 大頂推:即父節點的值大于左右子樹的值。 循環構建大頂推 在給定的數組,既可以明確樹的高度。 在循環的時候,構建樹的高度從lgn至0。即從堆低往堆…

【鴻蒙HarmonyOS Next App實戰開發】二維碼生成技術實現與解析

隨著移動應用開發中對便捷交互體驗的需求日益增長,二維碼作為信息傳遞的重要載體,其生成與使用變得越來越普遍。本文將基于鴻蒙HarmonyOS應用開發框架,詳細介紹如何實現一個功能完備的二維碼生成器,并附上完整代碼解析。 注意該實…

1 Studying《Is Parallel Programming Hard》6-9

目錄 Chapter 6 Partitioning and Synchronization Design 6.1 分區練習 6.2 設計準則 6.3 同步粒度 6.4 并行快速路徑 6.5 超越黨派分歧 6.6 分區、并行和優化 Chapter 7 Locking 7.1 活命 7.2 鎖的類型 7.3 鎖定實施問題 7.4 基于鎖的存在性保證 7.5 鎖定&a…

Java練習題精選16-20

Java練習題精選16-20 一、第十六題二、第十七題三、第十八題四、第十九題五、第二十題一、第十六題 現有一個存放學生成績的數組{66, 77, 88, 99},要求將該數組正序輸出每個下標所對應的元素。 public class Test {public static void main(String[] args) {int<

新能源知識庫(68)汽車電鍍與蒸汽

汽車電鍍是提升零部件耐磨性、抗腐蝕性和美觀性的關鍵工藝&#xff0c;其流程根據基材&#xff08;金屬或塑料&#xff09;和部件功能需求有所差異。 汽車電鍍是以 基材特性和 功能需求為導向的精密工藝&#xff1a; ?金屬件?&#xff1a;核心流程為 ?除油→酸洗→電鍍→鈍…

Veo 3 視頻生成大模型完整操作教程(2025)

隨著 AI 多模態能力的飛躍&#xff0c;Google DeepMind 發布的 Veo 3 成為了生成視頻領域的一顆重磅炸彈。它不僅能夠根據文本生成高質量的視頻畫面&#xff0c;還能同步生成對白、背景音和環境音&#xff0c;是目前最接近真正“AI 導演”的大模型。 本文將帶你詳細了解 Veo 3…

10【認識文件系統】

1 認識硬件——磁盤 1.1 物理構成 磁盤是計算機中唯一的機械設備&#xff0c;同時也是一種外部存儲設備&#xff08;外設&#xff09;。早期的計算機通常配備的是機械硬盤&#xff08;HDD&#xff09;&#xff0c;依靠磁頭和盤片的機械運動來進行數據的讀寫。但隨著用戶對計算…

Windows命令連接符的安全風險分析與防御策略

1. 命令連接符簡介 在 Windows 的命令行環境&#xff08;CMD/PowerShell&#xff09;中&#xff0c;命令連接符用于在同一行執行多個命令&#xff0c;提高效率。然而&#xff0c;攻擊者常利用這些符號構造惡意命令&#xff0c;繞過安全檢測或執行多階段攻擊。 常見命令連接符…

大屏可視化制作指南

一、大屏可視化概述 &#xff08;一&#xff09;概念 大屏可視化是指通過大屏幕展示復雜數據的視覺呈現形式&#xff0c;它借助圖形、圖表、地圖等元素&#xff0c;將海量數據以直觀易懂的方式呈現出來&#xff0c;幫助用戶快速理解數據背后的含義和價值。 &#xff08;二&a…

Halcon ——— OCR字符提取與多類型識別技術詳解

工業視覺實戰&#xff1a;OCR字符提取與多類型識別技術詳解 在工業自動化領域&#xff0c;OCR字符提取是產品追溯、質量控制和信息讀取的核心技術。本文將深入解析Halcon中OCR字符提取的全流程&#xff0c;重點解釋核心算子參數&#xff0c;并提供完整的工業級代碼實現。 一、O…

嵌入式項目:基于QT與Hi3861的物聯網智能大棚集成控制系統

關鍵詞&#xff1a;MQTT、物聯網、QT、網絡連接、遠程控制 一、系統概述 本系統是一套完整的智能大棚監控解決方案&#xff0c;由兩部分構成&#xff1a; 基于Hi3861的嵌入式硬件系統&#xff08;負責環境數據采集和設備控制&#xff09;基于Qt開發的跨平臺控制軟件&#xf…

揭開 Git 裸倉庫的神秘面紗:`git clone --mirror` 詳解與使用指南

大家好&#xff01;在使用 Git 進行版本控制時&#xff0c;我們最熟悉的莫過于那些帶有工作目錄的本地倉庫了——我們在里面編輯文件、提交代碼&#xff0c;然后推送到遠程倉庫。但有時候&#xff0c;我們可能會遇到一種特殊的倉庫&#xff1a;裸倉庫&#xff08;Bare Reposito…

opensuse安裝rabbitmq

您好&#xff01;安裝 RabbitMQ 消息隊列是一個非常棒的選擇&#xff0c;它是許多現代應用架構中的核心組件。 在 openSUSE Tumbleweed 上安裝 RabbitMQ 主要有兩種流行的方式&#xff1a;一種是使用系統的包管理器 zypper&#xff0c;另一種是使用 Docker 容器。我將為您詳細…

超詳細YOLOv8/11圖像菜品分類全程概述:環境、數據準備、訓練、驗證/預測、onnx部署(c++/python)詳解

文章目錄 一、環境準備二、數據準備三、訓練四、驗證與預測五、模型部署 一、環境準備 我的都是在Linux系統下&#xff0c;訓練部署的&#xff1b;模型訓練之前&#xff0c;需要配置好環境&#xff0c;Anaconda、顯卡驅動、cuda、cudnn、pytorch等&#xff1b; 參考&#xff1…

JUC:4.線程常見操作與兩階段終止模式

在線程中&#xff0c;wait()、join()、sleep()三個方法都是進行阻塞的方法。對應可以使用interrupt()方法進行打斷&#xff0c;被打斷后線程會拋出打斷異常&#xff0c;但是不會修改IsInterrupt&#xff0c;也就是此時去調用IsInterrupted()方法后獲得的實際上是false。 而當線…