# 怎么創建NumPy矩陣
NumPy是Python科學計算的核心庫之一,提供了高性能的多維數組對象`ndarray`及各種操作工具。本文將全面介紹7種創建NumPy矩陣的方法,包括基礎創建、特殊矩陣生成以及從外部數據源構建矩陣的技巧。
## 一、NumPy矩陣基礎概念
### 1.1 什么是NumPy矩陣
NumPy矩陣本質上是二維的`ndarray`對象,具有以下特點:
- 同質數據類型:所有元素類型相同
- 固定大?。簞摻ê缶S度不可變
- 支持向量化操作:避免顯式循環
- 內存連續存儲:高效的內存訪問
### 1.2 矩陣與數組的區別
```python
import numpy as np
# 數組是N維的,矩陣特指2維
arr = np.array([1,2,3]) # 一維數組
mat = np.matrix([[1,2],[3,4]]) # 二維矩陣
# 矩陣類已被棄用,推薦使用二維ndarray
# 一維數組
arr1d = np.array([1, 2, 3])
# 二維矩陣
matrix_2d = np.array([[1, 2, 3],
[4, 5, 6]])
# 指定數據類型
float_matrix = np.array([[1, 2], [3, 4]], dtype=np.float64)
# 傳統矩陣類(Python 3中不推薦使用)
deprecated_mat = np.matrix("1 2; 3 4")
# 等效的ndarray方式
recommended_mat = np.array([[1, 2], [3, 4]])
zeros_3x3 = np.zeros((3, 3))
"""
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
"""
eye_4x4 = np.eye(4)
"""
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
"""
ones_2x5 = np.ones((2, 5))
diag_matrix = np.diag([1, 3, 5, 7])
# 均勻分布[0,1)
random_mat = np.random.rand(3, 4)
# 標準正態分布
normal_mat = np.random.randn(2, 2)
# 指定范圍的隨機整數
int_mat = np.random.randint(0, 10, (3,3))
# 創建一維數組
arr = np.arange(0, 10, 2) # [0 2 4 6 8]
# 重塑為矩陣
matrix = arr.reshape(2, 2)
# 等間距數值
linear_mat = np.linspace(0, 1, 9).reshape(3,3)
# 對數刻度數值
log_mat = np.logspace(0, 2, 9).reshape(3,3)
import pandas as pd
df = pd.DataFrame({'A': [1,2], 'B': [3,4]})
matrix_from_df = df.to_numpy()
# 從文本文件加載
data = np.loadtxt('data.txt')
# 從CSV文件加載
csv_data = np.genfromtxt('data.csv', delimiter=',')
binary_data = bytes([1,2,3,4,5,6])
matrix_from_bytes = np.frombuffer(binary_data, dtype=np.uint8).reshape(2,3)
# 坐標網格生成
x, y = np.mgrid[0:3, 0:3]
# 等價于
x, y = np.meshgrid(np.arange(0,3), np.arange(0,3))
# 水平拼接
hstack_mat = np.hstack([np.eye(2), np.ones((2,1))])
# 垂直拼接
vstack_mat = np.vstack([np.array([1,2]), np.array([3,4])])
# 自定義函數生成
def gen_func(i, j):
return i**2 + j**2
func_mat = np.fromfunction(gen_func, (3,3))
mat = np.random.rand(3,4)
print("維度:", mat.ndim) # 2
print("形狀:", mat.shape) # (3,4)
print("元素總數:", mat.size) # 12
print("數據類型:", mat.dtype) # float64
# 檢查是否為矩陣結構
def is_matrix(arr):
return arr.ndim == 2
# 檢查是否為方陣
def is_square(mat):
return mat.shape[0] == mat.shape[1]
# 低效方式(不斷重新分配)
result = np.empty((0,3))
for i in range(5):
result = np.vstack([result, np.array([i, i+1, i+2])])
# 高效方式
result = np.empty((5,3))
for i in range(5):
result[i,:] = [i, i+1, i+2]
# 默認float64(占內存)
large_mat = np.ones((1000,1000))
# 改用float32節省內存
compact_mat = np.ones((1000,1000), dtype=np.float32)
# 模擬RGB圖像矩陣 (height, width, channels)
image = np.random.randint(0, 256, (480, 640, 3), dtype=np.uint8)
# 特征矩陣 (samples, features)
X = np.random.randn(100, 5)
# 標簽向量
y = np.random.randint(0, 2, 100)
# 創建拉普拉斯算子矩陣
def laplacian(n):
diag = np.eye(n) * -2
off_diag = np.eye(n, k=1) + np.eye(n, k=-1)
return diag + off_diag
NumPy數組創建后大小固定,如需動態變化,可以考慮: 1. 預分配足夠大的空間 2. 使用列表暫存數據,最后轉換 3. 使用np.vstack/np.hstack拼接
對于大多數零元素的矩陣:
from scipy.sparse import csr_matrix
sparse_mat = csr_matrix((3, 4), dtype=np.int8)
large_mat = np.memmap('temp.dat', dtype='float32', mode='w+', shape=(10000,10000))
掌握NumPy矩陣創建是進行科學計算的基礎。建議: 1. 優先使用ndarray而非matrix類 2. 根據場景選擇最合適的創建方法 3. 注意內存管理和數據類型選擇 4. 大型矩陣考慮稀疏存儲或內存映射
通過靈活運用這些技巧,可以高效地構建各種數值計算所需的矩陣結構。 “`
本文共約2750字,涵蓋了從基礎到高級的NumPy矩陣創建方法,包含代碼示例35個,采用Markdown格式編寫,符合技術文檔規范。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。