- 十一、NumPy
- 1. 多维数组
- 1.1 创建多维数组
- 1.2 多维数组的常用属性
- 2. 多维数组的基本操作
- 2.1 算术运算
- 2.2 自身运算
- 2.3 随机数组
- 2.4 索引、切片和迭代
NumPy是一个高性能的科学计算和数据分析基础包,它具有多维数组对象、线性代数、傅里叶变换和随机数等强大功能。
1. 多维数组 1.1 创建多维数组import numpy as np #平时的使用中,习惯将import numpy写成import numpy as np np.array([1, 2, 3])
array([1, 2, 3])
np.array([[1, 2, 3], [4, 5, 6]])
array([[1, 2, 3],
[4, 5, 6]])
np.zeros([2, 3]), np.ones([2, 3]), np.ones((2, 3)) #里面的维度使用列表或者元组形式都行
(array([[0., 0., 0.],
[0., 0., 0.]]),
array([[1., 1., 1.],
[1., 1., 1.]]),
array([[1., 1., 1.],
[1., 1., 1.]]))
a = np.ones([2, 3]) a[1, 2] = 2 a
array([[1., 1., 1.],
[1., 1., 2.]])
np.empty([1, 2]), np.empty([2, 3], dtype=int)
(array([[1.76971408e-171, 1.74931728e+009]]),
array([[-1809049168, 564, 0],
[ 0, 1, 7471207]]))
np.arange(2000)
array([ 0, 1, 2, ..., 1997, 1998, 1999])1.2 多维数组的常用属性
#adim返回维度数量 a = np.array([1, 2]) b = np.array([[1, 2, 3], [4, 5, 6]]) c = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [0, 0, 0]]]) print(a.ndim, b.ndim, c.ndim) #其实就是有几个中括号
1 2 3
#shape返回维度值 print(c) print(a.shape, b.shape, c.shape)
[[[1 2 3] [4 5 6]] [[7 8 9] [0 0 0]]] (2,) (2, 3) (2, 2, 3)
#size返回元素总数量 print(a.size, b.size, c.size)
2 6 12
#dtype返回数据类型 d = np.ones((2, 3)) a.dtype, d.dtype
(dtype('int32'), dtype('float64'))
d = np.ones((2, 3), dtype = int) e = np.ones((2, 3), dtype = np.int32) d.dtype, e.dtype #更改数据类型的写法,如果是改为int32,就有两种,int默认是int32
(dtype('int32'), dtype('int32'))
#itemsize返回字节大小 e.itemsize #32/8=4
42. 多维数组的基本操作 2.1 算术运算
a = np.array([4, 5, 6]) b = np.array([1, 2, 3]) a + b, a - b, a * b, a / b, a % b, a ** b
(array([5, 7, 9]), array([3, 3, 3]), array([ 4, 10, 18]), array([4. , 2.5, 2. ]), array([0, 1, 0], dtype=int32), array([ 4, 25, 216], dtype=int32))
#矩阵运算 a.dot(b), np.dot(a, b)
(32, 32)
#数组直接和标量运算 a + 2, a - 2, a * 2, a / 2, a % 2, a ** 2
(array([6, 7, 8]), array([2, 3, 4]), array([ 8, 10, 12]), array([2. , 2.5, 3. ]), array([0, 1, 0], dtype=int32), array([16, 25, 36], dtype=int32))2.2 自身运算
x = np.array([1, 2, 3]) x.min(), x.max(), x.sum()
(1, 3, 6)
#axis=0时,按列计算,保留行 x = np.array([[1, 5, 6], [4, 2, 3]]) print(x.min(), x.min(axis=0), x.min(axis=1)) print(x.max(), x.max(axis=0), x.max(axis=1)) print(x.sum(), x.sum(axis=0), x.sum(axis=1))
1 [1 2 3] [1 2] 6 [4 5 6] [6 4] 21 [5 7 9] [12 9]
#指数运算,平方根运算,二次方运算 x = np.array([1, 2, 3]) np.exp(x), np.sqrt(x), np.square(x)
(array([ 2.71828183, 7.3890561 , 20.08553692]), array([1. , 1.41421356, 1.73205081]), array([1, 4, 9], dtype=int32))2.3 随机数组
np.random.seed(42) #随机数生成器的随机因子,之后无论运行多少次程序,生成的数据都是一样的 '''生成随机样本数''' np.random.rand(2, 3) #[0, 1)范围内,均匀分布
array([[0.37454012, 0.95071431, 0.73199394],
[0.59865848, 0.15601864, 0.15599452]])
np.random.randn(2, 3) #均值为0,方差为1的正态分布
array([[ 1.57921282, 0.76743473, -0.46947439],
[ 0.54256004, -0.46341769, -0.46572975]])
np.random.randint(1, 60) #生成一个1和60之间的随机整数
25
np.random.binomial(10, 0.6, 100) #10个样本数,每个样本成功的概率是0.6,测试了100次 #从具有指定参数,n次试验和p个成功概率的二项式分布中抽取样本,其中n个整数> = 0,且p在[0,1]区间内。 #(n可以作为浮点输入,但在使用中会被截断为整数)
array([8, 4, 7, 3, 7, 7, 5, 5, 6, 6, 5, 7, 2, 3, 5, 7, 5, 8, 9, 7, 6, 4,
5, 5, 6, 7, 7, 3, 9, 4, 6, 6, 5, 6, 4, 4, 6, 7, 6, 4, 7, 6, 6, 5,
8, 5, 4, 7, 7, 3, 7, 4, 6, 7, 4, 6, 6, 7, 6, 8, 6, 3, 7, 5, 7, 5,
8, 3, 6, 7, 8, 7, 6, 7, 5, 6, 7, 6, 5, 8, 7, 9, 5, 5, 6, 4, 5, 6,
4, 7, 8, 7, 8, 6, 4, 9, 8, 6, 4, 7])
np.random.beta(1, 10) #指定维度且满足beta分布
0.03929334089516656
np.random.normal(1, 10) #指定维度且满足高斯正态分布
-0.39589628155173752.4 索引、切片和迭代
x = np.arange(10) x, x[:5]
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), array([0, 1, 2, 3, 4]))
x = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
x[1], x[0:2, 1:3]#第0行、第1行,第1列、第2列
(array([4, 5, 6]),
array([[2, 3],
[5, 6]]))
#针对不同维度进行迭代
for i in x:
print(i)
[1 2 3] [4 5 6] [7 8 9]
for i in x:
for j in i:
print(j)
1 2 3 4 5 6 7 8 9
#上面的迭代可以扁平化处理
for i in x.flat:
print(i)
1 2 3 4 5 6 7 8 9



