环境使用 Kaggle 里免费建立的 Notebook
教程使用 B 站 一位 UP 的 10分钟学会Numpy,然后我在此基础上做了一点补充。
小技巧:当遇到函数看不懂的时候可以按 Shift+Tab 查看函数详解。
1. 导入 numpy# 如果是在自己电脑上进行操作,没有 numpy 可以使用以下命令安装模块 # !pip install numpy import numpy as np2. array 的创建 2.1 np.array()
np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2.2 np.zeros 和 np.zeros_like()
创建一个全零矩阵:
np.zeros((3, 3))
创建一个指定矩阵相同形状的全零矩阵,下面的例子中 np.zeros_like(a) 就是创建一个与 a 矩阵相同形状的全零矩阵:
a = np.array([[1, 2, 3],
[4, 5, 6]])
np.zeros_like(a)
2.3 np.ones() 和 np.ones_like()
创建一个全 1 矩阵:
np.ones((3, 3))
创建一个指定矩阵相同形状的全 1 矩阵,下面的例子中 np.ones_like(a) 就是创建一个与 a 矩阵相同形状的全 1 矩阵,与 np.zeros_like() 的用法类似:
a = np.array([[1, 2, 3],
[4, 5, 6]])
np.ones_like(a)
2.4 np.empty() 和 np.empty_like()
不像 np.zeros() 和 np.ones() 创建矩需要用 0 和 1 进行初始值,np.empty() 不进行初始化,因此运行起来可能要快一点;
np.empty() 创建出来的矩阵中的值是无意义的数据,每次创建的值可能不一样:
np.empty((2, 3))
np.empty_like() 用法和与 np.zeros_like() 和 np.ones_like() 类似,就不赘述了。
np.full((3, 2), 0.5)
若指定的维度为一个标量,则输出
1
×
标
量
值
1times 标量值
1×标量值 的 array:
np.full(3, 2), np.full((3,), 2)
np.full_like() 用法与上面一致,不过多赘述。
2.6 np.eye()创建一个单位矩阵:
np.eye(4)2.7 np.arange()
创建一个 arrary,从 10 10 10 开始迭代,范围 [ 10 , 20 ) [10, 20) [10,20),步长为 2 2 2:
np.arange(10, 20, 2)2.8 np.linspace()
创建一个 arrary,将 [ 10 , 20 ] [10, 20] [10,20] 分成 5 5 5 个值的等差数列:
np.linspace(10, 20, 5)2.9 np.logspace()
创建一个 arrary,将 [ 1 0 0 , 1 0 3 ] [10^0, 10^3] [100,103] 分成 4 4 4 个值的等比数列:
np.logspace(0, 3, 4, base=10)2.10 np.diag()
若对矩阵使用,取对角线:
np.diag([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
若对 arrary 使用,创建 arrary 维的对角矩阵,其对角线为 arrary 中的数:
np.diag([1, 2, 3])2.11 np.tri()
创建一个下三角为 1 的矩阵:
np.tri(3)2.12 np.vander()
生成特定的范德蒙数组:
np.vander([1, 2, 3, 4, 5])2.13 np.arange()
给定数值范围生成 array:
np.arange(12)3. array 属性 3.0 用于展示的例子
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10,11,12]])
a
3.1 shape
array 的形状:
a.shape3.2 size
array 的元素个数:
a.size3.3 T
array 的转置:
a.T3.4 real 和 imag
array 的实部和虚部(因为全是实数所以虚部都为 0):
a.real, a.imag4. array 操作 4.0 用于展示的例子
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10,11,12]])
a
4.1 copy()
不用 copy(),直接使用 = 赋值后的结果:
# 直接赋值给 a_cp a_cp = a # 更改 a_cp[0, 0] = 99 a, a_cp
修改数组 a_cp,原数组 a 同时发生改变。
使用 copy() 后的结果:
a_cp = a.copy() a_cp[0, 0] = 99 a, a_cp
修改数组 a_cp,原数组 a 不变。
4.2 reshape()与 pytorch 对比: pytorch 中的 tensor 变量可以使用 clone() 实现 numpy 中 copy() 相同的效果。
改变数组的形状:
a.reshape(2, 6)4.3 resize()
改变数组的形状,和 reshape() 不同,resize() 直接改变原数组,没有返回值;
reshape() 不会改变原数组,而是返回一个原数组改变形状后的的 copy():
a.resize(2, 6), a4.4 flatten()
将 array 拉平为一个向量:
a, a.flatten()4.5 max(), min(), mean(), var(), std()
求数组的的最大值,最小值,平均数,方差,标准差:
a.max(), a.min(), a.mean(), a.var(), a.std()
还可以指定维度 axis:
a.max(axis=0), a.min(axis=1, keepdims=True), a.mean(axis=0), a.var(axis=1), a.std(axis=1)
keepdims=True 参数可以使数组保持原来的维度输出。
a = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10,11,12]])
a
5.1 切片
想要在每个维度上取得得索引用 : 隔开,: 之前缺省为 0 0 0,: 之后缺省为该维度的长度;索引 b:e 的取值范围为 [b, e)
a, a[0:3, 0:2], a[-2:,:2]5.2 键对索引
a, a[1, 1], a[[1, 2], [1, 3]]5.3 np.ix_()
有时候我们想取自定义列和自定义行的数据怎么办?
假设想取行索引为
1
1
1 和
2
2
2 ,列索引为
1
1
1 和
3
3
3 的数据。
通过 5.2 节可以看到 a[[1, 2], [1, 3]] 这样取值是不行的,这时候就得用 ix_() 函数:
a, a[np.ix_([1, 2], [1, 3])]5.4 np.nditer()
nditer() 可以用于迭代:
print(a)
for i in a:
print(i, end=' ')
print('n')
for i in np.nditer(a):
print(i, end=' ')
print('n')
for i in np.nditer(a, order='F'):
print(i, end=' ')
order='F' 参数可以定义以不同的顺序读取。
a = np.arange(12).reshape(3, 4) b = np.arange(0, 120, 10).reshape(3, 4) a, b6.1 vstack()
v 指的是 vertical(垂直),将矩阵在垂直方向上拼接起来:
np.vstack([a, b])6.2 hstack()
h 指的是 horizontal(水平),将矩阵在水平方向上拼接起来:
np.hstack([a, b])6.3 stack()
在指定维度上进行拼接:
c = np.stack([a, b], axis=1) c, c.shape
axis 参数用于指定在哪个维度进行堆叠,缺省为
0
0
0。
垂直方向上拆分 array 为指定的份数:
d = np.arange(16).reshape(4, 4) d, np.vsplit(d, 2)
6.5 hsplit()**补充:**要注意 vsplit(),hsplit(),split() 的返回值是 python 的 list。
水平方向上拆分 array 为指定的份数:
d, np.hsplit(d, 2)6.6 split()
指定维度上对 array 拆分为指定的份数:
d, np.split(d, 2, axis=1)7. 数学和统计函数 7.1 三角函数
不限于下面这些:
np.sin(10), np.cos(10), np.tan(10)7.2 数学函数
不限于下面这些:
np.exp(1), np.log(np.e), np.log2(16)7.2 argmax() 和 argmin()
argmax() 和 argmin() 分别表示沿给定维度返回最大和最小元素的索引:
t = np.array([[2, 1, 3],
[4, 9, 0],
[15,8, 7]])
t, np.argmax(t, axis=1), np.argmin(t, axis=1)
7.3 amin() 和 amax(),max() 和 min()
amin() 和 amax() 实现的效果与 max() 和 min() 一样:
t, np.max(t, axis=1, keepdims=True), np.amax(t, axis=1, keepdims=True)
t, np.min(t, axis=1, keepdims=True), np.amin(t, axis=1, keepdims=True)7.4 ptp()
计算数组中元素最大值与最小值的差(可以指定维度):
t, np.ptp(t), np.ptp(t, axis=0), np.ptp(t, axis=1)7.5 percentile() 和 nanpercentile()
计算数组中的指定的分位数(可以指定维度):
指定
50
50
50 表示计算中位数:
a, np.percentile(a, 50), np.percentile(a, 50, axis=1)
当数组中有 np.nan 值时使用 nanpercentile() 即可。
7.6 median(), mean(), std(), var()median() mean(), std(), var() 分别表示计算数组的中位数,平均值,标准差,方差(都可以指定维度):
a, np.median(a), np.mean(a, axis=0), np.std(a), np.var(a, axis=1, keepdims=True)7.7 average()
可以指定权重,计算数组加权平均值:
k = np.array([1, 2, 3, 4]) wts = np.array([4, 3, 2, 1]) k, np.average(k), np.average(k, weights=wts), (1*4+2*3+3*2+4*1)/(4+3+2+1)



