NumPy 入门:从 0 到 1 掌握 Python 数据处理利器
如果你刚接触 Python 数据分析,一定会听到 “NumPy” 这个名字 —— 它就像数据处理的 “瑞士军刀”,不管是机器学习、图表绘制,还是日常数据计算,几乎都离不开它。今天咱们就用最直白的方式,把 NumPy 的核心知识点讲明白。
一、先搞懂:NumPy 到底是什么?
NumPy 的全称是 “Numerical Python”(数值 Python),简单说就是专门用来处理 “数字数组” 的工具库。
你可能会问:“Python 本身不是有列表(list)吗?为什么还要用 NumPy?”
举个例子就懂了:
如果想给列表里的每个数字加 1,普通 Python 列表需要写循环:
# 普通Python列表
my_list = [1, 2, 3, 4]
new_list = [x + 1 for x in my_list] # 必须用循环
print(new_list) # 输出:[2, 3, 4, 5]
但用 NumPy 的 “数组”(ndarray),直接写arr + 1就行,不用循环,还跑得更快(底层是 C 语言实现):
import numpy as np # 导入NumPy,约定用np当别名
# NumPy数组
my_arr = np.array([1, 2, 3, 4])
new_arr = my_arr + 1 # 直接运算,超简洁
print(new_arr) # 输出:[2 3 4 5]
这就是 NumPy 的核心优势:简洁的向量运算 + 超高的计算效率。
二、第一步:安装 NumPy 并验证
1. 安装(超简单)
如果你的电脑装了 Python,打开 “命令提示符”(Windows)或 “终端”(Mac),输入一行命令:
pip install numpy
等待几秒,NumPy 就装好了。
2. 验证是否安装成功
打开 Python 编辑器(比如 PyCharm、Jupyter),输入以下代码:
import numpy as np # 导入NumPy
print(np.__version__) # 查看版本号
如果输出类似1.26.4的版本号,说明安装成功啦!
三、NumPy 的核心:ndarray 数组
ndarray 是 “N-dimensional array”(N 维数组)的缩写,比如 1 维数组(像一条线)、2 维数组(像一张表格)、3 维数组(像一个魔方)。它是 NumPy 的 “灵魂”,所有操作都围绕它展开。
1. 怎么创建 ndarray?(5 种常用方法)
方法 1:从 Python 列表转成 ndarray
用np.array()把列表包起来,就能变成 ndarray:
# 1维数组(列表转)
arr1 = np.array([1, 2, 3, 4])
# 2维数组(列表套列表,像表格)
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr1) # 输出:[1 2 3 4]
print(arr2) # 输出:
# [[1 2 3]
# [4 5 6]]
方法 2:创建全 0 / 全 1 数组
用np.zeros()创建全 0 数组,np.ones()创建全 1 数组,需要指定 “形状”(比如(2,3)表示 2 行 3 列):
# 2行3列的全0数组
zero_arr = np.zeros((2, 3))
# 3行2列的全1数组
one_arr = np.ones((3, 2))
print(zero_arr) # 输出全是0的2行3列数组
print(one_arr) # 输出全是1的3行2列数组
方法 3:创建 “连续数字” 数组
用np.arange(),类似 Python 的range(),但返回的是 ndarray:
# 从0到9(不包含10),步长1
arr_range = np.arange(0, 10, 1)
print(arr_range) # 输出:[0 1 2 3 4 5 6 7 8 9]
# 从2到10,步长2
arr_step = np.arange(2, 10, 2)
print(arr_step) # 输出:[2 4 6 8]
方法 4:创建 “均匀分布” 数组
用np.linspace(),指定 “起始值、结束值、分成多少份”,适合需要均匀取值的场景:
# 从0到10,分成5份(包含10)
arr_lin = np.linspace(0, 10, 5)
print(arr_lin) # 输出:[ 0. 2.5 5. 7.5 10. ]
方法 5:创建随机数组
用np.random模块,比如创建 0-1 之间的随机数:
# 2行2列的随机数组(值在0-1之间)
random_arr = np.random.rand(2, 2)
print(random_arr) # 输出类似:
# [[0.34 0.89]
# [0.12 0.56]]
2. ndarray 的 3 个关键属性(必看)
创建完数组后,用这 3 个属性能快速了解数组的 “基本信息”:
- shape:数组的形状(几行几列)
- dtype:数组里元素的数据类型(比如 int64、float64)
- ndim:数组的维度(1 维、2 维、3 维)
举个例子:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("形状(行数,列数):", arr.shape) # 输出:(2, 3)(2行3列)
print("数据类型:", arr.dtype) # 输出:int64(整数类型)
print("维度:", arr.ndim) # 输出:2(2维数组)
四、ndarray 必学操作:变形、索引与切片
1. 调整数组形状:reshape ()
用reshape()可以把数组改成想要的形状(前提是 “总元素数不变”)。比如把 1 维数组改成 2 行 3 列:
# 1维数组(6个元素)
arr = np.arange(6) # 输出:[0 1 2 3 4 5]
# 改成2行3列
arr_reshape = arr.reshape(2, 3)
print(arr_reshape) # 输出:
# [[0 1 2]
# [3 4 5]]
2. 索引:取单个元素
和 Python 列表类似,ndarray 用[行索引, 列索引]取元素(注意:索引从 0 开始!):
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 取第0行(第一行)、第1列(第二列)的元素
print(arr[0, 1]) # 输出:2
# 取第1行、第2列的元素
print(arr[1, 2]) # 输出:6
3. 切片:取多个元素
用[行切片, 列切片]取一片元素,格式是[start:end:step](start 默认 0,end 默认到最后,step 默认 1):
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
# 取第0-1行(不包含2)、第1-2列(不包含3)
slice_arr = arr[0:2, 1:3]
print(slice_arr) # 输出:
# [[2 3]
# [6 7]]
五、NumPy 的 “杀手锏”:向量运算
之前咱们提到,NumPy 不用循环就能做数组运算,这就是 “向量运算”。常用的运算都支持:
1. 数组与数字的运算
给数组里的每个元素都加 / 减 / 乘 / 除同一个数字:
arr = np.array([1, 2, 3])
print(arr + 2) # 每个元素加2 → [3 4 5]
print(arr * 3) # 每个元素乘3 → [3 6 9]
print(arr / 2) # 每个元素除以2 → [0.5 1. 1.5]
2. 数组与数组的运算
两个形状相同的数组,可以直接对应元素做运算:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2) # 对应元素相加 → [5 7 9]
print(arr1 * arr2) # 对应元素相乘 → [4 10 18]
六、NumPy 常用函数:让数据处理更高效
NumPy 内置了很多实用函数,不用自己写逻辑,直接调用就行。
1. 统计函数(常用)
- np.mean(arr):计算平均值
- np.max(arr):计算最大值
- np.min(arr):计算最小值
- np.sum(arr):计算总和
- np.median(arr):计算中位数
例子:统计学生成绩
# 5个学生的成绩(1维数组)
scores = np.array([85, 92, 78, 90, 88])
print("平均分:", np.mean(scores)) # 输出:86.6
print("最高分:", np.max(scores)) # 输出:92
print("总分:", np.sum(scores)) # 输出:433
2. 数学函数(常用)
- np.sqrt(arr):计算平方根
- np.sin(arr):计算正弦值(弧度)
- np.cos(arr):计算余弦值(弧度)
例子:计算平方根
arr = np.array([4, 9, 16])
print(np.sqrt(arr)) # 输出:[2. 3. 4.]
3. 数组拼接与拆分
- np.concatenate([arr1, arr2]):拼接数组
- np.split(arr, 份数):拆分数组
例子:拼接两个 2 行 3 列的数组
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[7,8,9],[10,11,12]])
# 按行拼接(上下拼)
concat_arr = np.concatenate([arr1, arr2], axis=0)
print(concat_arr) # 输出4行3列的数组
七、小案例:用 NumPy 分析简单数据
假设你有 3 个同学的 “数学、语文、英语” 成绩,用 NumPy 计算:
- 每个同学的总分
- 每科的平均分
代码实现:
import numpy as np
# 成绩表:行=同学,列=数学、语文、英语
scores = np.array([
[90, 85, 92], # 同学A
[88, 95, 80], # 同学B
[92, 88, 93] # 同学C
])
# 1. 每个同学的总分(按行求和,axis=1)
student_total = np.sum(scores, axis=1)
print("每个同学的总分:", student_total) # 输出:[267 263 273]
# 2. 每科的平均分(按列求平均,axis=0)
subject_avg = np.mean(scores, axis=0)
print("每科的平均分:", subject_avg) # 输出:[90. 89.333... 88.333...]
短短几行代码,就能完成数据统计,这就是 NumPy 的效率!
更多推荐
所有评论(0)