图解NumPy包一文就够了(2025版)
图解NumPy包一文就够了(2025版)
NumPy是Python生态系统中数据分析、机器学习和科学计算的核心库。它提供了强大的数组操作功能,是许多主流Python库(如scikit-learn、SciPy、pandas和TensorFlow)的基础。本文将通过详细的图解和代码示例,帮助读者全面掌握NumPy的基本使用方法。
NumPy包简介
NumPy包是Python生态系统中数据分析、机器学习和科学计算的主力。它极大地简化了对向量和矩阵的操作和处理,Python的一些主要软件包依赖NumPy作为其基础设施的基本组成部分(例如scikit-learn、SciPy、pandas和TensorFlow)。
在vcsode中新建一个文件,numpy.ipynb,打开就可以交互式的运行Python了:官网好像已经更新到2.2.0版本了!
# 导入NumPy
import numpy as np
# 查看版本
np.__version__
# 1.26.4
创建数组
1. 通过传递给np.array()
函数一个list对象,来创建一个数组:
# 比如这里一维的数组
data = np.array([1,2,3])
data
图示如下,有了图的加持,真的非常好理解:
2. 创建一个随机初始化数组
np.ones
,np.zeros
,np.random.random
分别表示创建一个指定长度为n的数组:
data = np.ones(3)
data
data = np.zeros(3)
data
data = np.random.random(3)
data
图示:
3. 多维数组
二维:
data = np.array([[1,2],[3,4]])
data
# 同样的
np.ones((3,2))
np.zeros((3,2))
np.random.random((3,2))
更高维:
np.array([ [[1,2],[3,4]],
[[5,6],[7,8]] ])
np.ones((4,3,2))
np.zeros((4,3,2))
np.random.random((4,3,2))
提取子集
使用下标和切片提取,Python的下标是从0开始的:
data = np.array([[1,2],[3,4],[5,6]])
data
data[0,1]
data[1:3]
data[1:3,]
data[0:2,0]
数组转置与reshape()
转置:行变成列,列变成行
data = np.array([[1,2],[3,4],[5,6]])
data
data.T
reshape:
data = np.array([1,2,3,4,5,6])
data
data.reshape(2,3)
data.reshape(3,2)
数组运算
1. 矩阵可以进行加减乘除等数学运算:
# 首先创建两个维度一致的矩阵:
data = np.array([1,2])
ones = np.ones(2)
# 加法
ad = data + ones
ad
2. 其他运算:
# 减法
sub = data - ones
sub
# 乘法
mul = data * data
# 除法
div = data / data
# 自动补全
pl = data * 1.6
图示:但是这里的运算好像和线性代数里面感觉有点不一样啊?
3. 自动补全:
4. 最小值/最大值/平均值等:
data = np.array([1,2,3])
data.max()
data.min()
data.sum()
data.prod()
data.std()
二维数组每一行每一列的最大、最小值:
data = np.array([[1,2],[3,4],[5,6]])
data.max(axis=0)
data.max(axis=1)
axis=0表示按列运算,axis=1表示按行运算:更多的运算见:https://jakevdp.github.io/PythonDataScienceHandbook/02.04-computation-on-arrays-aggregates.html
5. 多维数组运算
# data + ones
data = np.array([[1,2],[3,4]])
ones = np.ones((2,2))
data + ones

# data + ones_row
data = np.array([[1,2],[3,4],[5,6]])
ones_row = np.ones((1,2))
data + ones_row
6. 点积运算(dot)
这个运算看起来比较像线性代数里面的两个矩阵相乘:
data1 = np.array([1,2,3])
data2 = np.array([[1,10],[100,1000],[10000,100000]])
data1.dot(data2)
高级运算
除了向量和矩阵支持运算外,公式的使用也是NumPy成为宠儿的原因之一。例如在解决回归问题中监督式机器学习的核心公式:均方差公式
error = (1/n) * np.sum(np.square(predictions - labels))
具体计算过程如下:predictions与labels这两个参数的长度需要相同:
step1
step1
step2
step2
step3
step3
step4
step4
更多应用
1. 音频文件
一段音频可以存为一个一维数组,通过切片法可以剪辑任意一段:CD质量的音频每秒包含44,100个样本,每个样本是-65535到65536之间的整数。这意味着如果你有一个10秒的CD质量WAVE文件,你可以将它加载到长度为10 * 44,100 = 441,000的NumPy数组中
2. 图像Images
图像是像素大小(高度 x 宽度)的矩阵。如果图像是黑白的(也称为灰度),每个像素可以用一个数字表示(通常介于0(黑色)和255(白色)之间)。想要裁剪图像左上角10 x 10像素的部分吗?使用numpy
如果图像是彩色的,那么每个像素用三个数字表示——红色、绿色和蓝色各一个值。在这种情况下,我们需要一个三维(因为每个单元格只能包含一个数字)。所以一个彩色图像是由一个3维数组表示的:(高 x 宽 x 3)
使用图的形式直观展示出来是不是容易理解多了~