前言
正文
2.1numpy 属性
导入 numpy 库,并简写为 np
创建一个数组
1 2
| array = np.array([[1, 2, 3], [2, 3, 4]])
|
打印数组
[[1 2 3]
[2 3 4]]
打印数组的维度
2
打印数组的形状
(2, 3)
打印数组的大小
6
2.2 numpy 的创建 array
定义 array 的 dtype
1
| a = np.array([2, 23, 4], dtype = np.int64)
|
打印数组类型
int64
定义零矩阵
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
定义全为一的矩阵
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
定义未初始化的矩阵
如果之前未定义过矩阵,内容为十分接近于 0 的随机数,否则值与上一个定义过的矩阵内容一致
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
定义有序的数列,np.arange(初始值,最终值,步长)
array([10, 12, 14, 16, 18])
将一个有序数列转换为矩阵
1
| np.arange(12).reshape(3, 4)
|
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
生成线段,np.linspace(初始值,最终值,段数)
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
生成线段,并把它改为矩阵
1
| np.linspace(1, 10, 6).reshape((2, 3))
|
array([[ 1. , 2.8, 4.6],
[ 6.4, 8.2, 10. ]])
2.3 numpy 基础运算
创建两个数组
1 2 3 4
| a = np.array([10, 20, 30, 40]) b = np.arange(4) print(a) print(b)
|
[10 20 30 40]
[0 1 2 3]
数组相减
array([10, 19, 28, 37])
数组乘方
array([ 1, 20, 900, 64000], dtype=int32)
对于 a 的每个值,进行正弦运算
array([-0.54402111, 0.91294525, -0.98803162, 0.74511316])
对 b 的每个数进行判断
array([ True, True, True, False])
array([False, False, False, True])
定义二维矩阵
1 2 3 4 5
| a = np.array([[1, 1], [0, 1]]) b = b.reshape(2, 2) print(a) print(b)
|
[[1 1]
[0 1]]
[[0 1]
[2 3]]
矩阵逐个相乘
array([[0, 1],
[0, 3]])
矩阵乘法
array([[2, 4],
[2, 3]])
array([[2, 4],
[2, 3]])
创建随机生成矩阵,内容为 0 到 1 的随机数
1 2
| a = np.random.random((2, 4)) print(a)
|
[[0.8173095 0.68161518 0.69519572 0.38590121]
[0.75305129 0.12209991 0.31815067 0.08084771]]
矩阵求和
3.854171189705032
矩阵最小值
0.08084770650268369
矩阵在第 1 维度(每一行)的求和
array([2.58002161, 1.27414958])
矩阵在每一列的求和
array([1.57036079, 0.80371509, 1.01334639, 0.46674891])
2.4 numpy 基础运算 2
定义一个矩阵
1 2
| A = np.arange(2, 14).reshape((3, 4)) print(A)
|
[[ 2 3 4 5]
[ 6 7 8 9]
[10 11 12 13]]
查询 A 中最小值的索引
0
查询 A 中最大值的索引
11
计算 A 的平均值
7.5
7.5
7.5
计算 A 的中位数
7.5
累加 A
array([ 2, 5, 9, 14, 20, 27, 35, 44, 54, 65, 77, 90], dtype=int32)
累差 A(后一列减前一列)
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
找出 A 中所有非零的下标(行,列)
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
对 A 进行逐行排序
1 2
| A = np.arange(14, 2, -1).reshape((3, 4)) print(A)
|
[[14 13 12 11]
[10 9 8 7]
[ 6 5 4 3]]
array([[11, 12, 13, 14],
[ 7, 8, 9, 10],
[ 3, 4, 5, 6]])
矩阵的转置
array([[14, 10, 6],
[13, 9, 5],
[12, 8, 4],
[11, 7, 3]])
array([[14, 10, 6],
[13, 9, 5],
[12, 8, 4],
[11, 7, 3]])
限制 A 的最小值和最大值
array([[9, 9, 9, 9],
[9, 9, 8, 7],
[6, 5, 5, 5]])
对于矩阵 A 逐列求平均值
array([10., 9., 8., 7.])
2.5 numpy 索引
1 2 3 4
| import numpy as np
A = np.arange(3, 15) print(A)
|
[ 3 4 5 6 7 8 9 10 11 12 13 14]
查找 A 的第 3 个值
6
1 2
| A = A.reshape((3, 4)) print(A)
|
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
查找 A 的第 2 行
[11 12 13 14]
查找 A 的第 1 行第 1 列
8
8
查找 A 的第一列(用冒号代替所有的数)
array([ 4, 8, 12])
查找 A 的第一行,第一列到第三列之间的数
array([8, 9])
用 for 循环输出 A 的所有行
1 2
| for row in A: print(row)
|
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
输出 A 的所有列
1 2
| for col in A.T: print(col)
|
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
将 A 转换为序列
array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
遍历 A 的各个元素
1 2
| for item in A.flat: print(item, end=",")
|
3,4,5,6,7,8,9,10,11,12,13,14,
2.6 numpy array 合并
1 2 3 4
| import numpy as np
A = np.array([1, 1, 1]) B = np.array([2, 2, 2])
|
A 和 B 向下合并(vertical stack)
1 2 3
| C = np.vstack((A, B)) print(C) print(A.shape, C.shape)
|
[[1 1 1]
[2 2 3]]
(3,) (2, 3)
A 和 B 左右合并(horizontal stack)
1 2 3
| C = np.hstack((A, B)) print(C) print(A.shape, C.shape)
|
[1 1 1 2 2 3]
(3,) (6,)
将 A 从横向数列转换为竖向数列
array([[[1]],
[[1]],
[[1]]])
将 A 和 B 纵向合并
1 2 3
| A = np.array([1, 1, 1])[:, np.newaxis] B = np.array([2, 2, 2])[:, np.newaxis] np.vstack((A, B))
|
array([[1],
[1],
[1],
[2],
[2],
[2]])
array([[1, 2],
[1, 2],
[1, 2]])
设定数组在哪一个维度进行合并
1
| np.concatenate((A, B, B, A), axis=1)
|
array([[1, 2, 2, 1],
[1, 2, 2, 1],
[1, 2, 2, 1]])
2.7 numpy array 分割
1 2 3 4
| import numpy as np
A = np.arange(12).reshape((3, 4)) print(A)
|
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
等量分割 A,np.split(数组, 个数,维度)
[array([[0],
[4],
[8]]),
array([[1],
[5],
[9]]),
array([[ 2],
[ 6],
[10]]),
array([[ 3],
[ 7],
[11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
不等量分割 A,np.array_split()
1
| np.array_split(A, 3, axis=1)
|
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2],
[ 6],
[10]]),
array([[ 3],
[ 7],
[11]])]
2.8 numpy 的 copy & deep copy
1 2
| A = np.arange(4) print(A)
|
[0 1 2 3]
1 2 3 4 5
| B = A C = A D = B A[0] = 11 print(A)
|
[11 1 2 3]
判断两个变量是否相同
True
True
A.copy()
当 A 的值被改变时,B,C,D 的值也会被改变
array([11, 1, 2, 3])
此时改变 A 的值,不会改变 B 的值
array([11, 1, 2, 44])
array([11, 1, 2, 3])