文章目录
- 第一部分 为什么要用Numpy
- 第二部分 Numpy数组的创建
- 2.1 从列表开始创建
- 2.2 从头创建数组
- 2.2.1 np.zeros 创建值都为0的数组
- 2.2.2 np.ones 创建一个值都为1的数组
- 2.2.3 np.full 创建一个值都为指定数字的数组
- 2.2.4 np.eye 创建一个单位矩阵
- 2.2.5 np.arange 创建一个线性序列数组
- 2.2.6 np.linspace 创建一个等差数列
- 2.2.7 np.logspace 创建一个等比数列
- 2.2.8 np.random.random 创建一个在0~1之间均匀分布的随机数构成的数组
- 2.2.9 np.random.rand 创建一个在0~1之间均匀分布的随机数构成的数组
- 2.2.10 np.random.normal 创建一个正态分布随机数构成的数组
- 2.2.11 np.random.randn 创建一个标准正态分布随机数构成的数组
- 2.2.12 np.random.randint 创建随机整数构成的数组
- 2.2.13 随机重排列
- 2.2.14 np.random.choice 按指定形状随机采样,可指定概率
- 第三部分 Numpy数组的性质
- 第四部分 Numpy四大运算
- 第五部分 其他Numpy通用函数
第一部分 为什么要用Numpy
1.1 低效的Python for循环
- 【例】 求100万个数的倒数
def compute_reciprocals(values):
res = []
for value in values: # 每遍历到一个元素,就要判断其类型,并查找适用于该数据类型的正确函数
res.append(1/value)
return res
values = list(range(1, 1000000))
%timeit compute_reciprocals(values)
100 ms ± 822 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
- %timeit :ipython中统计运行时间的魔术方法(多次运行取平均值)
import numpy as np
values = np.arange(1, 1000000)
%timeit 1/values
4.28 ms ± 285 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
- 实现相同计算,Numpy的运行速度是Python循环的25倍,产生了质的飞跃
1.2 Numpy为什么如此高效
- Numpy 是由C语言编写的
- 编译型语言VS解释型语言
C语言执行时,对代码进行整体编译,速度更快。 - 连续单一类型存储VS分散多变类型存储
(1)Numpy数组内的数据类型必须是统一的,如全部是浮点型,而Python列表支持任意类型数据的填充。
(2)Numpy数组内的数据连续存储在内存中,而Python列表的数据分散在内存中。
这种存储结构,与一些更加高效的底层处理方式更加的契合。 - 多线程VS线程锁
Python语言执行时有线程锁,无法实现真正的多线程并行,而C语言可以。
1.3 什么时候用Numpy
- 在数据处理的过程中,遇到使用“Python for循环” 实现一些向量化、矩阵化操作的时候,要优先考虑用Numpy。
- 如:两个向量的点乘、矩阵乘法
第二部分 Numpy数组的创建
2.1 从列表开始创建
import numpy as np
x = np.array([1, 2, 3, 4, 5])
print(x)
print(type(x))
print(x.shape)
[1 2 3 4 5]
<class 'numpy.ndarray'>
(5,)
设置数组的数据类型
import numpy as np
x = np.array([1, 2, 3, 4, 5], dtype="float32")
print(x)
print(type(x[0]))
[1. 2. 3. 4. 5.]
<class 'numpy.float32'>
二维数组
import numpy as np
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(x)
print(x.shape)
[[1 2 3]
[4 5 6]
[7 8 9]]
(3, 3)
2.2 从头创建数组
2.2.1 np.zeros 创建值都为0的数组
import numpy as np
print(np.zeros(5, dtype=int))
[0 0 0 0 0]
2.2.2 np.ones 创建一个值都为1的数组
import numpy as np
print(np.ones((2, 4), dtype=float))
[[1. 1. 1. 1.]
[1. 1. 1. 1.]]
2.2.3 np.full 创建一个值都为指定数字的数组
import numpy as np
print(np.full((3, 5), 8.8))
[[8.8 8.8 8.8 8.8 8.8]
[8.8 8.8 8.8 8.8 8.8]
[8.8 8.8 8.8 8.8 8.8]]
2.2.4 np.eye 创建一个单位矩阵
import numpy as np
print(np.eye(3))
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
2.2.5 np.arange 创建一个线性序列数组
import numpy as np
print(np.arange(1, 15, 2)) # 从1开始,到15结束,步长为2
[ 1 3 5 7 9 11 13]
2.2.6 np.linspace 创建一个等差数列
import numpy as np
print(np.linspace(0, 1, 4)) # 四个数均匀的分配到0~1
[0. 0.33333333 0.66666667 1. ]
2.2.7 np.logspace 创建一个等比数列
import numpy as np
print(np.logspace(0, 9, 10)) # 10个元素形成10^0~10^9的等比数列
[1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]
2.2.8 np.random.random 创建一个在0~1之间均匀分布的随机数构成的数组
import numpy as np
print(np.random.random((3,3)))
[[0.43103112 0.90163353 0.97183695]
[0.11083239 0.10790603 0.25855347]
[0.58590392 0.49101639 0.43734257]]
2.2.9 np.random.rand 创建一个在0~1之间均匀分布的随机数构成的数组
import numpy as np
print(np.random.rand(3,3))
[[0.43103112 0.90163353 0.97183695]
[0.11083239 0.10790603 0.25855347]
[0.58590392 0.49101639 0.43734257]]
2.2.10 np.random.normal 创建一个正态分布随机数构成的数组
import numpy as np
print(np.random.normal(0, 1, (3,3))) # 形状3*3,均值为0,标准差为1
[[ 0.71657085 0.2826025 -0.34395535]
[ 0.16207986 0.33397837 -0.16482997]
[-0.50180039 -1.18629584 0.17830969]]
2.2.11 np.random.randn 创建一个标准正态分布随机数构成的数组
import numpy as np
print(np.random.randn(3,3)) # 等价于np.random.normal(0, 1, (3,3))
[[ 0.08651861 -0.24051704 0.70060128]
[-1.20089869 0.835285 0.47519735]
[-1.41045256 0.50119295 -1.46519798]]
2.2.12 np.random.randint 创建随机整数构成的数组
import numpy as np
print(np.random.randint(0, 10, (3,3))) # 形状3*3,在[0,10)之间
print(np.random.randint(10, size=(3,3)))
[[2 9 8]
[5 4 8]
[8 8 3]]
[[1 4 0]
[5 9 2]
[4 0 1]]
2.2.13 随机重排列
np.random.permutation 产生新列表
np.random.shuffle 修改原列表
import numpy as np
x = np.array([10, 20, 30, 40])
print(np.random.permutation(x)) # 产生新列表
print(x)
np.random.shuffle(x) # 修改原列表
print(x)
[30 10 40 20]
[10 20 30 40]
[10 30 20 40]
2.2.14 np.random.choice 按指定形状随机采样,可指定概率
import numpy as np
x = np.arange(10, 25, dtype = float)
print(x)
print(np.random.choice(x, size=(4, 3)))
print(np.random.choice(10, 5)) # 在0到9中采样5次
print(np.random.choice(x, 5, p=x/np.sum(x))) # 指定概率
[10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.]
[[22. 11. 21.]
[19. 15. 18.]
[11. 10. 11.]
[22. 14. 24.]]
[8 7 0 5 4]
[23. 11. 15. 17. 22.]
第三部分 Numpy数组的性质
3.1 数组的属性
数组的形状 shape
数组的维度 ndim
数组的大小 size
数组的数据类型 dtype
import numpy as np
x = np.random.randint(10, size=(3, 4))
print(x)
print(x.shape)
print(x.ndim)
y = np.arange(10)
print(y.ndim)
print(x.size)
print(x.dtype)
[[3 0 9 7]
[2 1 1 8]
[0 5 8 3]]
(3, 4)
2
1
12
int32
3.2 数组的索引
3.2.1 一维数组的索引——与列表一样
import numpy as np
x1 = np.arange(10)
print(x1)
print(x1[0])
print(x1[-1])
[0 1 2 3 4 5 6 7 8 9]
0
9
3.2.2 多维数组的索引——以二维为例
import numpy as np
x2 = np.random.randint(0, 20, (2,3))
print(x2)
print(x2[0, 0])
print(x2[0][0])
x2[0, 0] = 1.618
print(x2)
[[11 8 9]
[ 8 7 0]]
11
11
[[1 8 9]
[8 7 0]]
注意: numpy数组的数据类型是固定的,向一个整型数组插入一个浮点值,浮点值会向下进行取整
3.3 数组的切片
3.3.1 一维数组——跟列表一样
import numpy as np
x1 = np.arange(10)
print(x1)
print(x1[:3])
print(x1[3:])
print(x1[::-1])
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]
3.3.2 多维数组——以二维为例
import numpy as np
x2 = np.random.randint(20, size=(3,4))
print(x2)
print(x2[:2, :3]) # 前两行,前三列
print(x2[:2, 0:3:2]) # 前两行 前三列(每隔一列)
print(x2[::-1, ::-1])
[[ 9 15 17 8]
[ 9 16 5 15]
[ 5 5 15 13]]
[[ 9 15 17]
[ 9 16 5]]
[[ 9 17]
[ 9 5]]
[[13 15 5 5]
[15 5 16 9]
[ 8 17 15 9]]
3.3.3 获取数组的行和列
import numpy as np
x3 = np.random.randint(20, size=(3,4))
print(x3)
print(x3[1, :]) #第一行 从0开始计数
print(x3[1]) # 第一行简写
print(x3[:, 2]) # 第二列 从0开始计数
[[18 11 14 1]
[14 12 0 12]
[ 6 9 11 13]]
[14 12 0 12]
[14 12 0 12]
[14 0 11]
3.3.4 切片获取的是视图,而非副本
import numpy as np
x4 = np.random.randint(20, size=(3,4))
print(x4)
x5 = x4[:2, :2]
print(x5)
x5[0, 0] = 0
print(x5)
print(x4)
[[ 3 19 9 0]
[17 3 8 16]
[11 19 2 5]]
[[ 3 19]
[17 3]]
[[ 0 19]
[17 3]]
[[ 0 19 9 0]
[17 3 8 16]
[11 19 2 5]]
注意: 视图元素发生修改,则原数组亦发生相应修改
修改切片的安全方式:copy()
import numpy as np
x4 = np.random.randint(20, size=(3,4))
print(x4)
x6 = x4[:2, :2].copy()
print(x6)
x6[0, 0] = 0
print(x6)
print(x4)
[[15 15 13 17]
[16 13 14 6]
[ 6 18 3 15]]
[[15 15]
[16 13]]
[[ 0 15]
[16 13]]
[[15 15 13 17]
[16 13 14 6]
[ 6 18 3 15]]
3.4 数组的变形
3.4.1 reshape——视图
import numpy as np
x5 = np.random.randint(0, 10, (12,))
print(x5)
x6 = x5.reshape(3, 4)
print(x6)
x6[0, 0] = 0
print(x5)
[1 2 6 7 9 3 3 9 4 7 5 6]
[[1 2 6 7]
[9 3 3 9]
[4 7 5 6]]
[0 2 6 7 9 3 3 9 4 7 5 6]
3.4.2 一维向量转行向量 reshape、np.newaxis——视图
import numpy as np
x5 = np.random.randint(0, 10, (12,))
print(x5)
x7 = x5.reshape(1, x5.shape[0])
print(x7)
x8 = x5[np.newaxis, :]
print(x8)
[8 8 8 4 8 1 3 9 1 8 0 2]
[[8 8 8 4 8 1 3 9 1 8 0 2]]
[[8 8 8 4 8 1 3 9 1 8 0 2]]
3.4.3 一维向量转列向量 reshape、np.newaxis——视图
import numpy as np
x5 = np.random.randint(0, 10, (5,))
print(x5)
x7 = x5.reshape(x5.shape[0], 1)
print(x7)
x8 = x5[:, np.newaxis]
print(x8)
[8 8 4 5 6]
[[8]
[8]
[4]
[5]
[6]]
[[8]
[8]
[4]
[5]
[6]]
3.4.4 多维向量转一维向量
flatten()——副本
import numpy as np
x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x9 = x6.flatten()
print(x9)
[[9 3 2 6]
[9 0 6 2]
[3 9 7 8]]
[9 3 2 6 9 0 6 2 3 9 7 8]
ravel()——视图
import numpy as np
x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x10 = x6.ravel()
print(x10)
[[4 5 1 9]
[2 5 3 0]
[4 5 5 2]]
[4 5 1 9 2 5 3 0 4 5 5 2]
reshape(-1)——视图
import numpy as np
x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x11 = x6.reshape(-1)
print(x11)
[[8 2 4 5]
[0 3 3 7]
[7 5 0 7]]
[8 2 4 5 0 3 3 7 7 5 0 7]
3.5 数组的拼接
3.5.1 水平拼接 np.hstack([x1, x2])、np.c_[x1, x2]——副本
import numpy as np
x1 = np.array([[1, 2, 3],
[4, 5, 6]])
x2 = np.array([[7, 8, 9],
[0, 1, 2]])
x3 = np.hstack([x1, x2])
print(x3)
x4 = np.c_[x1, x2]
print(x4)
[[1 2 3 7 8 9]
[4 5 6 0 1 2]]
[[1 2 3 7 8 9]
[4 5 6 0 1 2]]
3.5.2 垂直拼接np.vstack([x1, x2])、np.r_[x1, x2]——副本
import numpy as np
x1 = np.array([[1, 2, 3],
[4, 5, 6]])
x2 = np.array([[7, 8, 9],
[0, 1, 2]])
x5 = np.vstack([x1, x2])
print(x5)
x6 = np.r_[x1, x2]
print(x6)
[[1 2 3]
[4 5 6]
[7 8 9]
[0 1 2]]
[[1 2 3]
[4 5 6]
[7 8 9]
[0 1 2]]
3.6 数组的分割
3.6.1 split的用法——视图
import numpy as np
x6 = np.arange(10)
print(x6)
x1, x2, x3 = np.split(x6, [2, 7])
print(x1, x2, x3)
[0 1 2 3 4 5 6 7 8 9]
[0 1] [2 3 4 5 6] [7 8 9]
3.6.2 hsplit的用法——视图
import numpy as np
x7 = np.arange(1, 16).reshape(3, 5)
print(x7)
left, middle, right = np.hsplit(x7, [2,4])
print("left:\n", left) # 第0~1列
print("middle:\n", middle) # 第2~3列
print("right:\n", right) # 第4列
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]]
left:
[[ 1 2]
[ 6 7]
[11 12]]
middle:
[[ 3 4]
[ 8 9]
[13 14]]
right:
[[ 5]
[10]
[15]]
3.6.3 vsplit的用法——视图
import numpy as np
x7 = np.arange(1, 16).reshape(5, 3)
print(x7)
upper, middle, lower = np.vsplit(x7, [2,4])
print("upper:\n", upper) # 第0~1行
print("middle:\n", middle) # 第2~3行
print("lower:\n", lower) # 第4行
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
upper:
[[1 2 3]
[4 5 6]]
middle:
[[ 7 8 9]
[10 11 12]]
lower:
[[13 14 15]]
3.7 根据索引数组生成数组——副本
3.7.1 一维数组
import numpy as np
x = np.random.randint(100, size=10)
print(x)
ind = [2, 6, 9]
print(x[ind])
ind = np.array([[1, 0],
[2, 3]])
print(x[ind])
[72 74 19 52 14 98 22 67 52 99]
[19 22 99]
[[74 72]
[19 52]]
3.7.2 多维数组
import numpy as np
x = np.arange(12).reshape(3, 4)
print(x)
row = np.array([0, 1, 2])
col = np.array([1, 3, 0])
print(x[row, col]) # x(0, 1) x(1, 3) x(2, 0)
print(row[:, np.newaxis]) # 列向量
print(x[row[:, np.newaxis], col]) # 广播机制
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[1 7 8]
[[0]
[1]
[2]]
[[ 1 3 0]
[ 5 7 4]
[ 9 11 8]]
第四部分 Numpy四大运算
4.1 向量运算
4.1.1 与数字的加减乘除等
import numpy as np
x1 = np.arange(1,6)
print(x1)
print("x1+5", x1+5)
print("x1-5", x1-5)
print("x1*5", x1*5)
print("x1/5", x1/5)
print("-x1", -x1)
print("x1**2", x1**2)
print("x1//2", x1//2)
print("x1%2", x1%2)
[1 2 3 4 5]
x1+5 [ 6 7 8 9 10]
x1-5 [-4 -3 -2 -1 0]
x1*5 [ 5 10 15 20 25]
x1/5 [0.2 0.4 0.6 0.8 1. ]
-x1 [-1 -2 -3 -4 -5]
x1**2 [ 1 4 9 16 25]
x1//2 [0 1 1 2 2]
x1%2 [1 0 1 0 1]
4.1.2 绝对值、三角函数、指数、对数
绝对值 abs、np.abs
import numpy as np
x2 = np.array([1, -1, 2, -2, 0])
print(x2)
print(abs(x2))
print(np.abs(x2))
[ 1 -1 2 -2 0]
[1 1 2 2 0]
[1 1 2 2 0]
三角函数 np.sin、np.cos、np.tan、np.arcsin、np.arccos、np.arctan
import numpy as np
theta = np.linspace(0, np.pi, 3)
print(theta)
print("sin(theta)", np.sin(theta))
print("cos(theta)", np.cos(theta))
print("tan(theta)", np.tan(theta))
x = [1, 0 ,-1]
print("arcsin(x)", np.arcsin(x))
print("arccon(x)", np.arccos(x))
print("arctan(x)", np.arctan(x))
[0. 1.57079633 3.14159265]
sin(theta) [0.0000000e+00 1.0000000e+00 1.2246468e-16]
cos(theta) [ 1.000000e+00 6.123234e-17 -1.000000e+00]
tan(theta) [ 0.00000000e+00 1.63312394e+16 -1.22464680e-16]
arcsin(x) [ 1.57079633 0. -1.57079633]
arccon(x) [0. 1.57079633 3.14159265]
arctan(x) [ 0.78539816 0. -0.78539816]
指数运算 np.exp
import numpy as np
x = np.arange(3)
print(x)
print(np.exp(x))
对数运算 np.log、np.log2、np.log10
import numpy as np
x = np.array([1, 2, 4, 8 ,10])
print("ln(x)", np.log(x))
print("log2(x)", np.log2(x))
print("log10(x)", np.log10(x))
ln(x) [0. 0.69314718 1.38629436 2.07944154 2.30258509]
log2(x) [0. 1. 2. 3. 3.32192809]
log10(x) [0. 0.30103 0.60205999 0.90308999 1. ]
4.1.3 两个数组的运算——对应位置元素分别运算
import numpy as np
x1 = np.arange(1,6)
print(x1)
x2 = np.arange(6,11)
print(x2)
print("x1+x2:", x1+x2)
print("x1-x2:", x1-x2)
print("x1*x2:", x1*x2)
print("x1/x2:", x1/x2)
[1 2 3 4 5]
[ 6 7 8 9 10]
x1+x2: [ 7 9 11 13 15]
x1-x2: [-5 -5 -5 -5 -5]
x1*x2: [ 6 14 24 36 50]
x1/x2: [0.16666667 0.28571429 0.375 0.44444444 0.5 ]
4.2 矩阵运算
4.2.1 矩阵的转置 x.T——视图
import numpy as np
x = np.arange(9).reshape(3, 3)
print(x)
y = x.T
print(y)
[[0 1 2]
[3 4 5]
[6 7 8]]
[[0 3 6]
[1 4 7]
[2 5 8]]
4.2.2 矩阵乘法 x.dot(y)、np.dot(x, y)
import numpy as np
x = np.array([[1, 0],
[1, 1]])
y = np.array([[0, 1],
[1, 1]])
print(x.dot(y))
print(np.dot(x, y))
print(x*y)
[[0 1]
[1 2]]
[[0 1]
[1 2]]
[[0 0]
[1 1]]
- 注意跟x * y的区别,x * y是对应位置元素相乘
4.3 广播运算
- 规则
如果两个数组的形状在维度上不匹配
那么数组的形式会沿着维度为1的维度进行扩展以匹配另一个数组的形状。
import numpy as np
x = np.arange(3).reshape(1, 3)
print(x)
print(x+5) # 先把5扩展成1×3的形状,再相加
[[0 1 2]]
[[5 6 7]]
import numpy as np
x1 = np.ones((3,3))
print(x1)
x2 = np.arange(3).reshape(1, 3)
print(x2)
print(x1+x2) # 先把1×3扩展成3×3的形状,再相加
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[[0 1 2]]
[[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]]
import numpy as np
x5 = np.arange(3).reshape(3, 1)
print(x5)
x6 = np.arange(3).reshape(1, 3)
print(x6)
print(x5+x6) # 分别扩展成3×3的形状,再相加
[[0]
[1]
[2]]
[[0 1 2]]
[[0 1 2]
[1 2 3]
[2 3 4]]
4.4 比较运算和掩码——逻辑运算要用 & 而不能用 and !!!
4.4.1 比较运算
import numpy as np
x1 = np.random.randint(100, size=(3,3))
print(x1)
print(x1 > 50)
[[38 38 79]
[ 3 54 97]
[23 31 19]]
[[False False True]
[False True True]
[False False False]]
4.4.2 操作布尔数组 np.sum(统计个数)、np.all、np.any
import numpy as np
x2 = np.random.randint(10, size=(3, 4))
print(x2)
print(x2 > 5)
print(np.sum(x2 > 5)) # 大于5的元素有几个
print(np.all(x2 > 0)) # 所有都满足条件
print(np.any(x2 == 6)) # 至少一个满足条件
print((x2 < 9, axis=1).all()) # 每行的元素是否都小于9,axis=0为按列
print((x2 < 9) & (x2 >5))
print(((x2 < 9) & (x2 >5)).sum()) # 加入逻辑运算
[[8 3 9 3]
[3 3 8 1]
[9 2 8 8]]
[[ True False True False]
[False False True False]
[ True False True True]]
6
True
False
[False True False]
[[ True False False False]
[False False True False]
[False False True True]]
4
4.4.2 将布尔数组作为掩码——副本
import numpy as np
x2 = np.random.randint(10, size=(3, 4))
print(x2)
print(x2 > 5)
print(x2[x2 > 5])
[[8 9 2 1]
[1 6 1 4]
[1 2 0 9]]
[[ True True False False]
[False True False False]
[False False False True]]
[8 9 6 9]
第五部分 其他Numpy通用函数
5.1 数值排序 np.sort(x)、x.sort()
import numpy as np
x = np.random.randint(20, 50, size=10)
print(x)
print(np.sort(x)) # 产生新的排序数组
print(x)
x.sort() # 替换原数组
print(x)
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]
获得排序索引 np.argsort(x)、x.argsort()
import numpy as np
x = np.random.randint(20, 50, size=10)
print(x)
i = np.argsort(x)
print(i)
print(x.argsort())
[20 47 24 26 24 44 44 41 40 36]
[0 2 4 3 9 8 7 5 6 1]
[0 2 4 3 9 8 7 5 6 1]
5.2 最大最小值及索引
import numpy as np
x = np.random.randint(20, 50, size=10)
print(x)
print("max:", np.max(x))
print("min:", x.min())
print("max_index:", x.argmax())
print("min_index:", np.argmin(x))
[26 48 24 29 35 23 47 37 46 26]
max: 48
min: 23
max_index: 1
min_index: 5
5.3 元素求和、求积
5.3.1 求和 np.sum(x)、x.sum()
axis指定维度,不指定则全体求和
keepdims指定是否保持数组维度,默认False
import numpy as np
x1 = np.arange(6).reshape(2,3)
print(x1)
print(np.sum(x1, axis=1)) # 按行求和
print(x1.sum(axis=1, keepdims=True))
print(np.sum(x1, axis=0)) # 按列求和
print(x1.sum(axis=0, keepdims=True))
print(np.sum(x1)) # 全体求和
print(x1.sum(keepdims=True))
[[0 1 2]
[3 4 5]]
[ 3 12]
[[ 3]
[12]]
[3 5 7]
[[3 5 7]]
15
[[15]]
5.3.2 求积 np.prod(x)、x.prod(),参数与求和一样
import numpy as np
x1 = np.arange(1,7).reshape(2,3)
print(x1)
print(x1.prod())
print(np.prod(x1))
[[1 2 3]
[4 5 6]]
720
720
5.4 中位数median、均值mean、方差var、标准差std
import numpy as np
x = np.random.normal(0, 1, size=10000)
print(np.median(x)) # 中位数 没有x.median()的写法
print(x.mean()) # 均值
print(np.mean(x))
print(x.var()) # 方差
print(np.var(x))
print(x.std()) # 标准差
print(np.std(x))
-0.0005526165156031632
-0.0031363778888049655
-0.0031363778888049655
0.993877024048911
0.993877024048911
0.9969338112677847
0.9969338112677847