人工智能之數據分析 numpy
第三章 Ndarray 對象和數組創建
(文章目錄)
前言
Ndarray 是 NumPy 的核心數據結構,本質是存儲單一數據類型的多維數組,也是後續所有操作的基礎。它具備高效的存儲和運算能力,能夠支持批量數據處理,區別於 Python 原生列表(可存儲多種數據類型、運算效率低)。
一、ndarray 對象的基本特點
- 同構性:數組中所有元素的數據類型必須相同。
- 維度(axes):可以是一維、二維、三維甚至更高維。
- 形狀(shape):表示每個維度的大小,是一個元組。
- 數據類型(dtype):如
int32、float64、bool等。 - 內存連續:默認情況下,數組在內存中是連續存儲的,便於高效訪問。
二、創建 ndarray 的多種方式
1. 從 Python 列表/元組創建
import numpy as np
# 一維數組
a = np.array([1, 2, 3])
print(a) # [1 2 3]
# 二維數組
b = np.array([[1, 2], [3, 4]])
print(b)
# [[1 2]
# [3 4]]
注意:
np.array()不會複製數據(除非必要),但會嘗試推斷 dtype。
2. 指定數據類型(dtype)
c = np.array([1, 2, 3], dtype=np.float32)
print(c.dtype) # float32
3. 使用內置函數創建特定數組
(1) np.zeros(shape):全 0 數組
z = np.zeros((2, 3))
# [[0. 0. 0.]
# [0. 0. 0.]]
(2) np.ones(shape):全 1 數組
o = np.ones((2, 2), dtype=int)
# [[1 1]
# [1 1]]
(3) np.empty(shape):未初始化的數組(內容隨機)
e = np.empty((2, 2))
# 內容不確定,僅分配內存
(4) np.full(shape, fill_value):填充指定值
f = np.full((2, 3), 7)
# [[7 7 7]
# [7 7 7]]
4. 創建等差或等比序列
(1) np.arange(start, stop, step):類似 Python 的 range,但返回 ndarray
r = np.arange(0, 10, 2) # [0 2 4 6 8]
注意:
stop不包含。
(2) np.linspace(start, stop, num):生成等間距的 num 個點(包含 stop)
l = np.linspace(0, 1, 5)
# [0. 0.25 0.5 0.75 1. ]
(3) np.logspace(start, stop, num, base=10):對數等間距
log_arr = np.logspace(0, 2, 5) # 10^0 到 10^2,5 個點
# [ 1. 3.16227766 10. 31.6227766 100. ]
5. 創建單位矩陣和對角矩陣
(1) np.eye(N, M=None, k=0):單位矩陣(對角為 1)
I = np.eye(3)
# [[1. 0. 0.]
# [0. 1. 0.]
# [0. 0. 1.]]
k表示對角線偏移(k=1為上對角,k=-1為下對角)
(2) np.identity(n):n×n 單位矩陣(是 eye(n) 的簡寫)
(3) np.diag(v, k=0):從向量構造對角矩陣,或提取對角線
v = [1, 2, 3]
d = np.diag(v)
# [[1 0 0]
# [0 2 0]
# [0 0 3]]
# 反過來:提取對角線
diag_vals = np.diag(d) # [1 2 3]
6. 隨機數組生成(使用 np.random 模塊)
推薦使用新的隨機數生成器(NumPy 1.17+):
rng = np.random.default_rng(seed=42)
# 均勻分佈 [0, 1)
rand_uniform = rng.random((2, 3))
# 正態分佈(均值0,標準差1)
rand_normal = rng.standard_normal((2, 2))
# 整數隨機
rand_int = rng.integers(low=0, high=10, size=(3,))
舊方法(仍可用,但不推薦):
np.random.rand(2, 3) # 均勻分佈
np.random.randn(2, 2) # 標準正態分佈
np.random.randint(0, 10, 5) # 整數
7. 從已有數組創建新數組(不復制數據或淺拷貝)
np.copy(a):深拷貝a.view():視圖(共享數據)np.asarray(a):如果 a 已是 ndarray,則不復制
a = np.array([1, 2, 3])
b = a.view() # 修改 b 會影響 a
c = np.copy(a) # 獨立副本
8. 從文件或字符串讀取(略提)
np.loadtxt(),np.genfromtxt():讀文本文件np.fromfile():讀二進制文件np.fromstring():從字符串解析(已棄用,建議用frombuffer)
三、常用屬性
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) # 數據類型:int64(取決於平台)
print(arr.itemsize) # 每個元素字節數
print(arr.data) # 內存地址(一般不用)
四、小結:常用創建函數速查表
| 方法 | 説明 |
|---|---|
np.array() |
從列表/元組創建 |
np.zeros() |
全 0 |
np.ones() |
全 1 |
np.empty() |
未初始化 |
np.full() |
填充指定值 |
np.arange() |
等差整數序列 |
np.linspace() |
等間距浮點序列 |
np.eye() / np.identity() |
單位矩陣 |
np.diag() |
對角矩陣 |
rng.random() / rng.integers() |
隨機數組 |
後續
部分代碼已經上傳至gitee,後續會逐步更新,主要受時間原因限制,當然自己也可以克隆到本地學習拓展。
資料關注
公眾號:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning
《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen)》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》