爱吃大米饭123
发布于

NumPy核心知识点+代码速查,数据处理入门必藏

搞懂NumPy,Python数据处理直接快人一步!整理了3个高频核心知识点,附可直接复制的代码示例,新手也能轻松上手👇

1. 数组创建:NumPy的“基石”

区别于Python列表,NumPy数组(ndarray)支持批量运算,是高效计算的核心。常用创建方式:

import numpy as np

# 1. 从列表转换
arr1 = np.array([1, 2, 3, 4])
print("列表转数组:", arr1)  # 输出:[1 2 3 4]

# 2. 生成固定范围数组
arr2 = np.arange(0, 10, 2)  # 起始值、终止值(不包含)、步长
print("范围数组:", arr2)   # 输出:[0 2 4 6 8]

# 3. 生成特殊数组(全0/全1/单位矩阵)
arr3 = np.zeros((2, 3))  # 2行3列全0数组
arr4 = np.ones((3, 2))   # 3行2列全1数组
arr5 = np.eye(3)         # 3阶单位矩阵

2. 数组运算:批量操作超省心

无需循环,直接对数组元素批量运算,效率翻倍!

import numpy as np

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

# 1. 标量运算(数组与数字)
print("数组+2:", arr + 2)  # 输出:[3 4 5 6]
print("数组*3:", arr * 3)  # 输出:[3 6 9 12]

# 2. 数组运算(同形状数组对应元素计算)
arr2 = np.array([5, 6, 7, 8])
print("数组相加:", arr + arr2)  # 输出:[ 6  8 10 12]
print("数组相乘:", arr * arr2)  # 输出:[ 5 12 21 32]

# 3. 矩阵运算(dot函数)
mat1 = np.array([[1,2],[3,4]])
mat2 = np.array([[5,6],[7,8]])
print("矩阵乘法:\n", mat1.dot(mat2)) 
# 输出:[[19 22]
#        [43 50]]

3. 索引与切片:精准提取数据

比Python列表更灵活的索引方式,支持多维数组精准定位

import numpy as np

# 1. 一维数组索引
arr1 = np.array([10, 20, 30, 40, 50])
print("索引第3个元素:", arr1[2])  # 输出:30(索引从0开始)
print("切片1-3个元素:", arr1[1:4])  # 输出:[20 30 40]

# 2. 二维数组索引(行索引, 列索引)
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print("第2行第3列:", arr2[1,2])  # 输出:6
print("第2行所有列:", arr2[1,:])  # 输出:[4 5 6]
print("所有行第2列:", arr2[:,1])  # 输出:[2 5 8]

# 3. 条件索引(筛选满足条件的元素)
print("大于5的元素:", arr2[arr2 > 5])  # 输出:[6 7 8 9]


小提示:NumPy的核心优势是“向量化运算”,避免用Python循环操作数组,能大幅提升运行速度!
这些都是NumPy日常使用的高频知识点,收藏起来随时查阅

NumPy 数组操作在实际项目中应用广泛,核心是利用其高效性处理数值型数据,以下是 3 个典型场景及结合前文知识点的实操方案:

1. 数据预处理(机器学习 / 数据分析高频)

需求:清洗原始数据(如填充缺失值、标准化)

实操

import numpy as np
# 模拟含缺失值的特征数据(前文数组创建+索引)
data = np.array([[1, 2, np.nan], [3, np.nan, 5], [6, 7, 8]])
# 1. 用列均值填充缺失值(向量化运算,避免循环)
col_means = np.nanmean(data, axis=0)  # 按列求均值
mask = np.isnan(data)  # 生成缺失值掩码(条件索引)
data[mask] = np.take(col_means, mask.nonzero()[1])  # 精准填充
# 2. 数据标准化(标量运算)
data_std = (data - np.mean(data)) / np.std(data)

2. 数值计算(科学计算 / 工程仿真)

需求:批量处理传感器数据、矩阵运算

实操

# 模拟1000个传感器的3组监测数据(随机数组创建)
sensor_data = np.random.randint(0, 100, size=(1000, 3))
# 1. 计算每组数据的统计量(向量化)
stats = np.array([sensor_data.mean(axis=0), sensor_data.std(axis=0)]).T
# 2. 矩阵转换(如坐标变换,前文矩阵运算)
transform_mat = np.array([[0.866, -0.5], [0.5, 0.866]])  # 旋转矩阵
sensor_rotated = sensor_data[:, :2].dot(transform_mat)  # 批量坐标旋转

3. 图像处理(计算机视觉基础)

需求:调整图像亮度、裁剪区域(图像本质是二维数组)

实操

# 模拟512x512的RGB图像(三维数组)
img = np.random.randint(0, 256, size=(512, 512, 3), dtype=np.uint8)
# 1. 提升亮度(标量运算,限制范围)
img_bright = np.clip(img + 30, 0, 255)
# 2. 裁剪感兴趣区域(切片,前文索引知识)
img_crop = img[100:300, 150:350, :]  # 裁剪中心200x200区域


核心逻辑:用向量化操作替代 Python 循环,结合数组创建、运算、索引的基础能力,适配各类数值型数据场景,这也是 Pandas、TensorFlow 等工具的底层依赖。


浏览 (36)
点赞
收藏
删除
评论