NumPy 数组操作基础

2026-06-15 · 阅读 6 分钟 · 数据分析

← 返回首页

NumPy 简介

NumPy 是 Python 科学计算的基础库,提供了高性能的多维数组对象和丰富的数学函数。它是 Pandas、Matplotlib、Scikit-learn 等库的基础。

安装与导入

pip install numpy

import numpy as np

创建数组

# 从列表创建
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

# 特殊数组
zeros = np.zeros((3, 3))      # 3x3 零矩阵
ones = np.ones((2, 4))        # 2x4 全1矩阵
eye = np.eye(4)               # 4x4 单位矩阵
diag = np.diag([1, 2, 3])    # 对角矩阵

# 等差序列
arr = np.arange(0, 10, 2)    # [0, 2, 4, 6, 8]
arr = np.linspace(0, 1, 5)   # [0, 0.25, 0.5, 0.75, 1]

# 随机数组
rand = np.random.rand(3, 3)   # 均匀分布
randn = np.random.randn(3, 3) # 正态分布
randint = np.random.randint(0, 10, (3, 3))  # 随机整数

数组属性

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.shape)    # (2, 3) - 形状
print(arr.ndim)     # 2 - 维度数
print(arr.size)     # 6 - 元素总数
print(arr.dtype)    # int64 - 数据类型
print(arr.itemsize) # 8 - 每个元素的字节数

数组索引与切片

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 基础索引
print(arr[0, 0])     # 1
print(arr[1, 2])     # 7

# 切片
print(arr[0:2, 1:3])  # [[2, 3], [6, 7]]
print(arr[:, 0])      # [1, 5, 9] - 第一列
print(arr[1, :])      # [5, 6, 7, 8] - 第二行

# 花式索引
print(arr[[0, 2], :])  # 第1行和第3行
print(arr[:, [1, 3]])  # 第2列和第4列

数组运算

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

# 逐元素运算
print(a + b)        # [[6, 8], [10, 12]]
print(a * b)        # [[5, 12], [21, 32]]
print(a ** 2)       # [[1, 4], [9, 16]]

# 矩阵运算
print(a @ b)        # 矩阵乘法
print(np.dot(a, b)) # 点积
print(a.T)          # 转置

# 统计运算
print(np.mean(a))   # 均值
print(np.std(a))    # 标准差
print(np.max(a))    # 最大值
print(np.sum(a, axis=0))  # 按列求和

广播机制

# 广播:不同形状的数组可以进行运算
arr = np.array([[1, 2, 3], [4, 5, 6]])
row = np.array([10, 20, 30])

print(arr + row)  # 每行都加上 row
# [[11, 22, 33], [14, 25, 36]]

col = np.array([[10], [20]])
print(arr + col)  # 每列都加上 col
# [[11, 12, 13], [24, 25, 26]]

实用函数

# 条件筛选
arr = np.array([1, 2, 3, 4, 5, 6])
print(arr[arr > 3])  # [4, 5, 6]

# 花式条件
mask = (arr > 2) & (arr < 5)
print(arr[mask])  # [3, 4]

# 排序
arr = np.array([3, 1, 4, 1, 5, 9])
print(np.sort(arr))  # [1, 1, 3, 4, 5, 9]

# 去重
arr = np.array([1, 2, 2, 3, 3, 3])
print(np.unique(arr))  # [1, 2, 3]

# 随机操作
arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)  # 原地打乱
print(arr)

# 保存和加载
np.save('array.npy', arr)
loaded = np.load('array.npy')

性能对比

import time

# Python 列表
start = time.time()
py_list = [i**2 for i in range(1000000)]
print(f"Python 列表: {time.time() - start:.4f} 秒")

# NumPy 数组
start = time.time()
np_arr = np.arange(1000000) ** 2
print(f"NumPy 数组: {time.time() - start:.4f} 秒")

# NumPy 通常比纯 Python 快 10-100 倍
小贴士: 尽量使用 NumPy 的向量化操作,避免使用 Python 循环,这样可以显著提高代码性能。

总结

NumPy 是 Python 数据科学的基石,掌握它的数组操作将为后续学习 Pandas、机器学习打下坚实基础。