ndarray的創建
用途 | 方法 | 語法示例 | 核心作用 | 輸出示例 |
基礎構造 | ||||
? 從?Python 數據結構創建 | np.array() | np.array([[1, 2], [3, 4]]) | 將列表/元組轉換為?ndarray | array([[1, 2], [3, 4]]) |
? 復制數組 | np.copy() | np.copy(arr) | 創建獨立副本(深拷貝) | 與原數組相同但不共享內存 |
預定義形狀填充 | ||||
? 全0數組 | np.zeros() | np.zeros((2,3)) | 快速初始化全0數組 | [[0., 0., 0.], [0., 0., 0.]] |
? 全1數組 | np.ones() | np.ones((3,2), dtype=int) | 快速初始化全1數組 | [[1, 1], [1, 1], [1, 1]] |
? 未初始化數組 | np.empty() | np.empty((2,2)) | 預分配內存(值隨機) | 隨機值(如?[[1e-323, 0.], [0., 0.]]) |
? 填充固定值 | np.full() | np.full((2,3), 5) | 用指定值填充數組 | [[5, 5, 5], [5, 5, 5]] |
基于數值范圍生成 | ||||
? 等差序列 | np.arange() | np.arange(0, 10, 2) | 生成步長固定的序列(不含終點) | [0, 2, 4, 6, 8] |
? 等間隔序列 | np.linspace() | np.linspace(0, 1, 5) | 生成指定數量的等間隔值(含終點) | [0.0, 0.25, 0.5, 0.75, 1.0] |
? 對數間隔序列 | np.logspace() | np.logspace(0, 2, 3, base=10) | 生成對數間隔值(如?10^0, 10^1, 10^2) | [1.0, 10.0, 100.0] |
特殊矩陣生成 | ||||
? 單位矩陣 | np.eye() | np.eye(3) | 生成單位矩陣(對角線為1) | [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]] |
? 對角矩陣 | np.diag() | np.diag([1, 2, 3]) | 生成以指定值為對角線的矩陣 | [[1, 0, 0], [0, 2, 0], [0, 0, 3]] |
隨機數組生成 | ||||
? 均勻分布隨機數 | np.random.rand() | np.random.rand(2,2) | 生成?[0,1) 均勻分布的隨機數 | [[0.43, 0.89], [0.21, 0.57]] |
? 正態分布隨機數 | np.random.randn() | np.random.randn(2,2) | 生成標準正態分布隨機數(均值為0,方差為1) | [[-0.5, 1.2], [0.3, -1.8]] |
? 隨機整數 | np.random.randint() | np.random.randint(1,10, (2,2)) | 生成指定范圍內的隨機整數 | [[3, 7], [5, 2]] |
高級構造方法 | ||||
? 從字符串創建 | np.array() | np.array(['a', 'bc']) | 將字符串轉換為字符數組 | array(['a', 'bc'], dtype='<U2') |
? 從文件讀取 | np.loadtxt() | np.loadtxt('data.txt') | 從文本文件加載數據 | 依賴文件內容(如?[[1., 2.], [3., 4.]]) |
? 函數生成數組 | np.fromfunction() | np.fromfunction(lambda i,j: i+j, (3,3)) | 根據函數生成數組元素 | [[0., 1., 2.], [1., 2., 3.], [2., 3., 4.]] |
創建方法匯總
- 基礎構造:??適用于手動構建小規模數組或復制已有數據。
- 預定義形狀填充:??用于快速初始化固定形狀的數組(如全0占位、全1初始化)。
- 基于數值范圍生成:??生成數值序列,常用于模擬時間序列、坐標網格等。
- 特殊矩陣生成:??數學運算專用(如線性代數中的單位矩陣)。
- 隨機數組生成:??模擬實驗數據、初始化神經網絡權重等場景。
- 高級構造方法:??處理非結構化數據(如文件、字符串)或通過函數生成復雜數組。
2.2.3.1 ?從?Python 數據結構轉換
將?Python 列表、元組等轉換為?ndarray,是最直接的方式。
np.array(object, dtype=None)
Python |
注意事項
- 混合類型時,NumPy 會統一為最高優先級類型(如?int + float → float,數值?+ 字符串?→ 字符串)。
- 列表的嵌套層級決定?ndim(維度數)。
2.2.3.2 預定義形狀填充
快速初始化固定形狀的數組,常用于占位或初始化權重矩陣。
Python |
Python |
默認數據類型為?float64,需顯式指定?dtype?為?int?或其他類型。
未初始化的數組?(np.empty)
np.empty(shape, dtype=float)
返回給定形狀和類型的未初始化的新數組。
創建未初始化的數組(值隨機,取決于內存狀態),適用于對性能要求極高的場景。
Python |
不推薦直接使用:需手動填充數據,否則可能引入不可預測的錯誤。
需要注意的是,np.empty?并不保證數組元素被初始化為?0,它只是分配內存空間,數組中的元素值是未初始化的,可能是內存中的任意值。
重復填充數組?(np.full)
np.full(shape, fill_value, dtype)
Python |
zeros_like():返回與給定數組具有相同形狀和類型的0新數組。
ones_like():返回與給定數組具有相同形狀和類型的1新數組。
empty_like():返回與給定數組具有相同形狀和類型的未初始化的新數組。
Plain Text |
2.2.3.3 基于數值范圍生成
(1) np.arange:等差序列
np.arange(start, stop, step)
返回在給定范圍內用均勻間隔的值填充的一維數組。
Python |
(2) np.linspace:等間隔數組(含終點)
np.linspace(start, stop, num=50) ?
返回指定范圍和元素個數的等差數列。數組元素類型為浮點型。
Python |
(3) np.logspace:對數間隔數組
np.logspace(start, stop, num=50, base=10) ?
返回指定指數范圍、元素個數、底數的等比數列。
Python |
2.2.3.4 ?特殊矩陣
矩陣補充知識
矩陣是線性代數的核心概念,可以理解為一個數字的矩形表格,用來表示數據、方程組或線性變換。下面用最直觀的方式介紹它的基本概念和應用。
矩陣是一個由?行(row)?和?列(column)?排列成的矩形數組,例如:
- 形狀(shape):這個矩陣有?2 行?3 列,記作?2×32×3 矩陣。
- 元素(entry):矩陣中的每個數字稱為元素,如?A1,2=2A1,2=2(第?1 行第?2 列)。
- 矩陣的用途
(1) 表示線性方程組
例如,方程組:
可以寫成矩陣形式:
即?Ax=b,其中:
- A?是系數矩陣,
- x?是未知數列向量,
- b?是常數項列向量。
(2) 表示線性變換
矩陣可以描述空間中的變換,比如旋轉、縮放、投影。
例如,一個?2×22×2 矩陣可以表示二維平面的旋轉:
作用在向量?[xy][xy] 上,會使其旋轉?θθ?角度。
(3) 數據表示(如機器學習)
在機器學習中,數據集通常用矩陣表示:
- 每一行代表一個樣本(如一張圖片),
- 每一列代表一個特征(如像素值)。
- 矩陣的基本運算
(1) 矩陣加法
對應位置的元素相加,要求兩個矩陣形狀相同:
(2) 矩陣數乘
矩陣的每個元素乘以一個標量(數):
(3) 矩陣乘法
矩陣乘法?不是?對應元素相乘,而是?行?× 列?的點積運算:
注意:矩陣乘法不滿足交換律(AB≠BAAB=BA)。
(4) 轉置(Transpose)
行列互換:
- 特殊矩陣
(1) 單位矩陣?(np.eye/np.identity)
Python |
Python |
(2) 對角矩陣?(np.diag)
Python |
Python |
2.2.3.5 ?隨機數組
(1) 均勻分布隨機數?(np.random.rand)
返回給定形狀的數組,用?[0, 1) 上均勻分布的隨機樣本填充。
Python |
(2) 正態分布隨機數?(np.random.randn)
返回給定形狀的數組,用標準正態分布(均值為0,標準差為1)的隨機樣本填充。
Python |
(3) 隨機整數?(np.random.randint)
返回給定形狀的數組,用從低位(包含)到高位(不包含)上均勻分布的隨機整數填充。
Python |
(4)random.uniform()
random.uniform():返回給定形狀的數組,用從低位(包含)到高位(不包含)上均勻分布的隨機浮點數填充。
arr3?= np.random.uniform(3, 6, (2, 3))
# [[5.69275495 3.84857937 3.2899215 ]
# ?[5.32035519 3.7460973 ?3.33859905]]
(5) 設置隨機種子?(np.random.seed)
np.random.seed?是?NumPy 中用于設置**隨機數生成器種子**的函數,目的是確保程序的隨機操作可以重復生成相同的結果(即保證隨機結果的確定性)。這在實驗復現、調試和教學場景中非常有用。
Python |
每次運行上述代碼都會得到相同的隨機數序列(例如?[0.37454012, 0.95071431, 0.73199394])。
關鍵細節
- 種子的一致性:
- 相同種子生成的隨機數序列完全一致。
- 不同種子(如?np.random.seed(0)?和?np.random.seed(1))會產生不同序列。
- 作用范圍:
- 種子對后續所有基于?NumPy 的隨機函數生效(如?np.random.rand(), np.random.normal(), np.random.shuffle()?等)。
通過控制種子,你能在“隨機”和“可復現”之間靈活切換!
2.2.3.6 高級構造方法
(1) np.loadtxt
Python |
(2) np.genfromtxt
Python |
2.2.3.7 創建方法推薦場景
場景 | 推薦方法 | 優點 |
快速初始化全0/全1數組 | np.zeros/np.ones | 內存預分配,明確值 |
生成數值序列 | np.arange/np.linspace | 靈活控制范圍和步長 |
創建單位矩陣或對角矩陣 | np.eye/np.diag | 數學運算專用 |
高性能預分配內存 | np.empty | 速度最快(需手動初始化) |
隨機數據生成 | np.random?模塊 | 模擬實驗數據 |