Python Numpy学习笔记(二)

  Python Numpy学习笔记第二篇。目前,正在学习北京理工大学嵩天老师在中国大学MOOC的课程:Python数据分析与展示。

ndarray数组的操作

索引和切片

索引:获取数组中特定位置元素的过程

切片:获取数组元素子集的过程

  • 一维数组的索引和切片
1
2
3
4
5
6
7
8
9
>>> a = np.array([1, 2, 3, 4, 5, 6])
>>> a[2]
3
>>> a[-2] # 从右开始
5
>>> a[1:4] # 起始编号:终止编号(不含):步长
array([2, 3, 4])
>>> a[0:6:2] # 指定步长为2
array([1, 3, 5])
  • 多维数组的索引和切片
1
2
3
4
5
6
7
8
9
10
11
>>> a = np.array([[1, 2, 3],[4, 5, 6]])
>>> a
array([[1, 2, 3],
[4, 5, 6]])
>>> a[1, 2]
6
>>> a[-1,-2] # 从右开始
5
# 选取一个维度用:,不同维度用逗号分开
>>> a[:1, 1:] # 每个维度切片方法与一维数组相同
array([[2, 3]])
基本运算
  • 一元函数
函数 说明
np.abs(x) np.fabs(x) 计算数组各元素的绝对值
np.sqrt(x) 计算数组各元素的平方根
np.square(x) 计算数组各元素的平方
np.log(x) np.log10(x) np.log2(x) 计算数组各元素的自然对数、10底对数和2底对数
np.ceil(x) np.floor(x) 计算数组各元素的ceiling值 或 floor值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> a = np.array([-2, 4, 6])
>>> np.abs(a)
array([2, 4, 6])
>>> a
array([-2, 4, 6])
>>> np.fabs(a)
array([ 2., 4., 6.])
>>> b = np.square(a)
>>> b
array([ 4, 16, 36])
>>> np.sqrt(b)
array([ 2., 4., 6.])
>>> np.log2(b)
array([ 2. , 4. , 5.169925])
>>> a = np.array([0.2, 1.5, 2.8])
>>> np.ceil(a)
array([ 1., 2., 3.])
>>> np.floor(a)
array([ 0., 1., 2.])
函数 说明
np.rint(x) 计算数组各元素的四舍五入值
np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) 计算数组各元素的普通型和双曲型三角函数
np.sin(x) np.sinh(x) 计算数组各元素的普通型和双曲型三角函数
np.tan(x) np.tanh(x) 计算数组各元素的普通型和双曲型三角函数
np.exp(x) 计算数组各元素的指数值
np.sign(x) 计算数组各元素的符号值,1(+),0,‐1(‐)
  • 二元函数
函数 说明
+, ‐, , /, * 两个数组各元素进行对应运算
np.maximum(x,y) np.fmax() 元素级的最大值/最小值计算
np.minimum(x,y) np.fmin() 元素级的最大值/最小值计算
np.mod(x,y) 元素级的模运算
np.copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素
>, <, >=, <=, ==, != 算术比较,产生布尔型数组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>>> a = np.array([[1, 2, 3],[4, 5, 6]])
>>> b = np.array([[1, 2, 3],[4, 5, 6]])
>>> a + b
array([[ 2, 4, 6],
[ 8, 10, 12]])
>>> a - b
array([[0, 0, 0],
[0, 0, 0]])
>>> a * b
array([[ 1, 4, 9],
[16, 25, 36]])
>>> a / b
array([[1, 1, 1],
[1, 1, 1]])
>>> a**2
array([[ 1, 4, 9],
[16, 25, 36]])
>>> np.maximum(a, b)
array([[1, 2, 3],
[4, 5, 6]])
>>> np.fmax(a, b)
array([[1, 2, 3],
[4, 5, 6]])
>>> np.mod(a, b)
array([[0, 0, 0],
[0, 0, 0]])
>>> a >= b
array([[ True, True, True],
[ True, True, True]], dtype=bool)

ndarray数组的变换

维度变换
方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
>>> import numpy as np
>>> a = np.ones((2,6))
>>> a
array([[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.]])
>>> a.reshape((3,4))
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>> a
array([[ 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1.]])
>>> a.resize((3,4))
>>> a
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
>>> a.flatten()
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>> a
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
类型变换

astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致。

1
2
3
4
5
6
7
8
9
10
>>> a = np.ones((2,3), dtype=np.int32)
>>> a
array([[1, 1, 1],
[1, 1, 1]])
>>> a.astype(np.float)
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> a
array([[1, 1, 1],
[1, 1, 1]])
转换成列表

tolist()方式可以实现将ndarray数组转换成列表。

1
2
3
4
5
6
>>> a = np.ones((2,3), dtype=np.int32)
>>> a
array([[1, 1, 1],
[1, 1, 1]])
>>> a.tolist()
[[1, 1, 1], [1, 1, 1]]
坚持原创技术分享,您的支持将鼓励我继续创作!