Python第三方库numpy的简单入门使用

首先,我们需要导入包文件

1
import numpy as np

一、numpy中的一般语法

1
2
3
4
5
6
7
8
9
10
11
12
# 矩阵的逆、转置及秩
data_1 = np.matrix('3 4 5;7 8 9')
print(data_1)
print("矩阵的逆:")
data_2 = data_1.I
print(data_2)
print("矩阵的转置:")
data_3 = data_1.T
print(data_3)
print("矩阵的秩:")
data_4 = np.linalg.matrix_rank(data_1)
print(data_4)
[[3 4 5]
 [7 8 9]]
矩阵的逆:
[[-1.08333333  0.58333333]
 [-0.08333333  0.08333333]
 [ 0.91666667 -0.41666667]]
矩阵的转置:
[[3 7]
 [4 8]
 [5 9]]
矩阵的秩:
2
1
2
# 矩阵的维度(也称为轴数)
print(data_1.ndim)
2

二、数组的创建

  1. 创建二维数组
    这里强调:使用matrix只能创建二维矩阵,而是用非matrix方法可以创建高维矩阵
1
2
3
4
5
6
# 全0的矩阵
arr_1 = np.matrix(np.zeros((3, 3)))
print(arr_1)
# 或者
arr_1 = np.zeros((3, 3))
print(arr_1)
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
1
2
3
4
5
6
# 全1的矩阵
arr_2 = np.matrix(np.ones((3, 3)))
print(arr_2)
# 或者
arr_2 = np.ones((3, 3))
print(arr_2)
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
1
2
3
# 创建随机矩阵
arr_3 = np.matrix(np.random.rand(3, 4))
arr_3
matrix([[0.48890396, 0.09218043, 0.38339213, 0.61843015],
        [0.35092127, 0.08485116, 0.84651857, 0.4481831 ],
        [0.88727766, 0.56471182, 0.49473952, 0.69027512]])
1
2
3
# 创建整数随机矩阵
arr_4 = np.matrix(np.random.randint(5, 10, size=(3, 4)))
arr_4
matrix([[7, 7, 7, 5],
        [6, 5, 8, 5],
        [5, 6, 7, 6]])
1
2
3
4
# 创建对角矩阵
new_list = [i for i in range(3, 7)]
arr_5 = np.matrix(np.diag(new_list))
arr_5
matrix([[3, 0, 0, 0],
        [0, 4, 0, 0],
        [0, 0, 5, 0],
        [0, 0, 0, 6]])
1
2
3
# 创建单位矩阵
arr_6 = np.eye(3)
arr_6
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
1
2
3
4
# 改变矩阵的形状
print(arr_4)
arr_7 = arr_4.reshape(4, 3)
arr_7
[[7 7 7 5]
 [6 5 8 5]
 [5 6 7 6]]





matrix([[7, 7, 7],
        [5, 6, 5],
        [8, 5, 5],
        [6, 7, 6]])
  1. 高维数组
1
2
3
4
# 例如创建3维的数组
arr_8 = np.arange(24).reshape(2, 3, 4)
print(arr_8)
print("数组维度:"+str(arr_8.ndim))
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
数组维度:3

三、numpy的索引和切片

1
2
3
print(arr_8)
print("单独获取到一个值")
print(arr_8[0,0,3])
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
单独获取到一个值
3
1
2
3
print(arr_8)
print("获取到深度为0的所有值")
print(arr_8[0,:,:])
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
获取到深度为0的所有值
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
1
2
3
print(arr_8)
print("获取到深度为0的前两行的值")
print(arr_8[0,:2,:])
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
获取到深度为0的前两行的值
[[0 1 2 3]
 [4 5 6 7]]
1
2
3
print(arr_8)
print("获取到深度为0的前两行后两列的值")
print(arr_8[0,:2,-2:])
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
获取到深度为0的前两行后两列的值
[[2 3]
 [6 7]]
1
2
3
4
5
6
7
8
print(arr_8)
print("获取到深度为0的前两行后两列的值并替换为-2")
print("获取到深度为0的前两行后两列的值")
print(arr_8[0,:2,-2:])
print("替换为-2")
arr_8[0,:2,-2:] = -2
print("原来数组")
print(arr_8)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
获取到深度为0的前两行后两列的值并替换为-2
获取到深度为0的前两行后两列的值
[[2 3]
 [6 7]]
替换为-2
原来数组
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

四、numpy的合并功能

1. 在第一轴合并
2. 在第二轴合并
3. 在第三轴合并
4. 在任意轴合并
1
2
3
4
5
6
7
# 1. 在第一轴合并
# vstack
print("合并前的arr_8\n"+str(arr_8))
temp_1 = arr_8
temp_2 = arr_8
temp = np.vstack((temp_1, temp_2))
print("两个arr_8合并后\n"+str(temp))
合并前的arr_8
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
两个arr_8合并后
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]

 [[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
1
2
3
4
5
6
7
# 2. 在第二轴合并
# hstack
print("合并前的arr_8\n"+str(arr_8))
temp_1 = arr_8
temp_2 = arr_8
temp = np.hstack((temp_1, temp_2))
print("两个arr_8合并后\n"+str(temp))
合并前的arr_8
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
两个arr_8合并后
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]
  [ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]
  [12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
1
2
3
4
5
6
7
# 3. 在第三轴合并
# dstack
print("合并前的arr_8\n"+str(arr_8))
temp_1 = arr_8
temp_2 = arr_8
temp = np.dstack((temp_1, temp_2))
print("两个arr_8合并后\n"+str(temp))
合并前的arr_8
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
两个arr_8合并后
[[[ 0  1 -2 -2  0  1 -2 -2]
  [ 4  5 -2 -2  4  5 -2 -2]
  [ 8  9 10 11  8  9 10 11]]

 [[12 13 14 15 12 13 14 15]
  [16 17 18 19 16 17 18 19]
  [20 21 22 23 20 21 22 23]]]
1
2
3
4
5
6
7
8
# 4. 任意轴合并
# concatenate
print("合并前的arr_8\n"+str(arr_8))
temp_1 = arr_8
temp_2 = arr_8
# axis表示设置在何处轴合并,默认在第一轴
temp = np.concatenate((arr_8, arr_8), axis=2)
print("两个arr_8合并后\n"+str(temp))
合并前的arr_8
[[[ 0  1 -2 -2]
  [ 4  5 -2 -2]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
两个arr_8合并后
[[[ 0  1 -2 -2  0  1 -2 -2]
  [ 4  5 -2 -2  4  5 -2 -2]
  [ 8  9 10 11  8  9 10 11]]

 [[12 13 14 15 12 13 14 15]
  [16 17 18 19 16 17 18 19]
  [20 21 22 23 20 21 22 23]]]