文章目录
- 构造矢量场的 x 方向的分量
- 构造矢量场的 y 分量
- 矢量场中的向量相减
- 任选图中两点组成一个矢量
- 可视化矢量图和被减的矢量
- 对矢量图的每个点减去矢量
V
V
V
- 对最终的矢量图的每个像素点值
- 将每个像素位置的值进行可视化
- 对符合某些条件的像素点进行筛选
构造矢量场的 x 方向的分量
- 构造矢量图的大小是
20
×
30
20 × 30
20×30
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x_grid = np.arange(0,30,1)
x_grid = np.tile(x_grid,(20,1))
x_grid.shape
(20, 30)
x_grid
array([[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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],
[ 0, 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]])
plt.imshow(x_grid)
构造矢量场的 y 分量
y_grid_ = np.arange(0,20,1)
y_grid_ = np.tile(y_grid_,(30,1))
plt.imshow(y_grid_)
y_grid = y_grid_.transpose([1,0])
plt.imshow(y_grid) # 转置之后才是真正的 y 分量
plt.quiver(x_grid,y_grid,1,-1,x_grid+y_grid)
'''
参数的意义分别是
plt.quiver(X,Y,U,V,C)
- X,Y 表示每一个像素点对应的单位向量的起始点位置
- U,V 共同表示了每个像素点上的单位向量,这里我们用 1,-1 代表的是对一个点 p 他的单位向量 v 的方向是朝右下方的
- C 是颜色 cmap,他的值的大小表示了当前像素点的向量的值的大小,值越大,单位向量的颜色越深,表示这个点的向量的模越大
- 例如本图中右下角的点 p = (30,30),他的 模就是 np.linalg.norm((30,30)) = 42.4264 但是在图中的每个像素上的向量都是用
单位向量表示,因此想表示这个向量的模就要用颜色的深浅来表示
'''
plt.ylim((20,0))
plt.colorbar()
矢量场中的向量相减
- 构造一个简单的矢量 (
x
1
,
y
1
x_1,y_1
x1,y1)
- 让整个矢量图中的所有矢量和这个矢量做差
任选图中两点组成一个矢量
points_x = np.array([10,20])
points_y = np.array([18,24])
v = points_y - points_x
v
array([8, 4])
可视化矢量图和被减的矢量
# 得到 v 的单位向量
unit_v = v / np.linalg.norm(v)
print(unit_v)
plt.scatter(x=v[0],y=v[1],color="red")
plt.quiver(x_grid,y_grid,1,-1,x_grid+y_grid)
plt.ylim((20,0))
plt.quiver(v[0],v[1],unit_v[0],unit_v[1],color="blue")
[0.89442719 0.4472136 ]
对矢量图的每个点减去矢量
V
V
V
new_x_grid = x_grid - v[0]
new_y_grid = y_grid - v[1]
plt.ylim((15.5,-4.5))
plt.quiver(new_x_grid
,new_y_grid
,new_x_grid
,new_y_grid
,1) # 在这里我们只在图上用 XYUV 区分了相减后每个矢量的位置和方向,
# 但是由于没有设定固定的矢量值的计算规则,所以我们在这里用一个固定值
# 进行表示
new_x_grid.shape
(20, 30)
对最终的矢量图的每个像素点值
- 在这里我们设定的规则是:每个像素点的值等于于他在 向量
V
V
V 方向上的值
- 即对
V
V
V 的单位向量
v
v
v 和矢量图上每个像素点位置的矢量做 点积 运算
product_values = unit_v[0] * new_x_grid + unit_v[1] * new_y_grid
product_values
array([[-8.94427191, -8.04984472, -7.15541753, -6.26099034, -5.36656315,
-4.47213595, -3.57770876, -2.68328157, -1.78885438, -0.89442719,
0. , 0.89442719, 1.78885438, 2.68328157, 3.57770876,
4.47213595, 5.36656315, 6.26099034, 7.15541753, 8.04984472,
8.94427191, 9.8386991 , 10.73312629, 11.62755348, 12.52198067,
13.41640786, 14.31083506, 15.20526225, 16.09968944, 16.99411663],
[-8.49705831, -7.60263112, -6.70820393, -5.81377674, -4.91934955,
-4.02492236, -3.13049517, -2.23606798, -1.34164079, -0.4472136 ,
0.4472136 , 1.34164079, 2.23606798, 3.13049517, 4.02492236,
4.91934955, 5.81377674, 6.70820393, 7.60263112, 8.49705831,
9.39148551, 10.2859127 , 11.18033989, 12.07476708, 12.96919427,
13.86362146, 14.75804865, 15.65247584, 16.54690303, 17.44133022],
[-8.04984472, -7.15541753, -6.26099034, -5.36656315, -4.47213595,
-3.57770876, -2.68328157, -1.78885438, -0.89442719, 0. ,
0.89442719, 1.78885438, 2.68328157, 3.57770876, 4.47213595,
5.36656315, 6.26099034, 7.15541753, 8.04984472, 8.94427191,
9.8386991 , 10.73312629, 11.62755348, 12.52198067, 13.41640786,
14.31083506, 15.20526225, 16.09968944, 16.99411663, 17.88854382],
[-7.60263112, -6.70820393, -5.81377674, -4.91934955, -4.02492236,
-3.13049517, -2.23606798, -1.34164079, -0.4472136 , 0.4472136 ,
1.34164079, 2.23606798, 3.13049517, 4.02492236, 4.91934955,
5.81377674, 6.70820393, 7.60263112, 8.49705831, 9.39148551,
10.2859127 , 11.18033989, 12.07476708, 12.96919427, 13.86362146,
14.75804865, 15.65247584, 16.54690303, 17.44133022, 18.33575742],
[-7.15541753, -6.26099034, -5.36656315, -4.47213595, -3.57770876,
-2.68328157, -1.78885438, -0.89442719, 0. , 0.89442719,
1.78885438, 2.68328157, 3.57770876, 4.47213595, 5.36656315,
6.26099034, 7.15541753, 8.04984472, 8.94427191, 9.8386991 ,
10.73312629, 11.62755348, 12.52198067, 13.41640786, 14.31083506,
15.20526225, 16.09968944, 16.99411663, 17.88854382, 18.78297101],
[-6.70820393, -5.81377674, -4.91934955, -4.02492236, -3.13049517,
-2.23606798, -1.34164079, -0.4472136 , 0.4472136 , 1.34164079,
2.23606798, 3.13049517, 4.02492236, 4.91934955, 5.81377674,
6.70820393, 7.60263112, 8.49705831, 9.39148551, 10.2859127 ,
11.18033989, 12.07476708, 12.96919427, 13.86362146, 14.75804865,
15.65247584, 16.54690303, 17.44133022, 18.33575742, 19.23018461],
[-6.26099034, -5.36656315, -4.47213595, -3.57770876, -2.68328157,
-1.78885438, -0.89442719, 0. , 0.89442719, 1.78885438,
2.68328157, 3.57770876, 4.47213595, 5.36656315, 6.26099034,
7.15541753, 8.04984472, 8.94427191, 9.8386991 , 10.73312629,
11.62755348, 12.52198067, 13.41640786, 14.31083506, 15.20526225,
16.09968944, 16.99411663, 17.88854382, 18.78297101, 19.6773982 ],
[-5.81377674, -4.91934955, -4.02492236, -3.13049517, -2.23606798,
-1.34164079, -0.4472136 , 0.4472136 , 1.34164079, 2.23606798,
3.13049517, 4.02492236, 4.91934955, 5.81377674, 6.70820393,
7.60263112, 8.49705831, 9.39148551, 10.2859127 , 11.18033989,
12.07476708, 12.96919427, 13.86362146, 14.75804865, 15.65247584,
16.54690303, 17.44133022, 18.33575742, 19.23018461, 20.1246118 ],
[-5.36656315, -4.47213595, -3.57770876, -2.68328157, -1.78885438,
-0.89442719, 0. , 0.89442719, 1.78885438, 2.68328157,
3.57770876, 4.47213595, 5.36656315, 6.26099034, 7.15541753,
8.04984472, 8.94427191, 9.8386991 , 10.73312629, 11.62755348,
12.52198067, 13.41640786, 14.31083506, 15.20526225, 16.09968944,
16.99411663, 17.88854382, 18.78297101, 19.6773982 , 20.57182539],
[-4.91934955, -4.02492236, -3.13049517, -2.23606798, -1.34164079,
-0.4472136 , 0.4472136 , 1.34164079, 2.23606798, 3.13049517,
4.02492236, 4.91934955, 5.81377674, 6.70820393, 7.60263112,
8.49705831, 9.39148551, 10.2859127 , 11.18033989, 12.07476708,
12.96919427, 13.86362146, 14.75804865, 15.65247584, 16.54690303,
17.44133022, 18.33575742, 19.23018461, 20.1246118 , 21.01903899],
[-4.47213595, -3.57770876, -2.68328157, -1.78885438, -0.89442719,
0. , 0.89442719, 1.78885438, 2.68328157, 3.57770876,
4.47213595, 5.36656315, 6.26099034, 7.15541753, 8.04984472,
8.94427191, 9.8386991 , 10.73312629, 11.62755348, 12.52198067,
13.41640786, 14.31083506, 15.20526225, 16.09968944, 16.99411663,
17.88854382, 18.78297101, 19.6773982 , 20.57182539, 21.46625258],
[-4.02492236, -3.13049517, -2.23606798, -1.34164079, -0.4472136 ,
0.4472136 , 1.34164079, 2.23606798, 3.13049517, 4.02492236,
4.91934955, 5.81377674, 6.70820393, 7.60263112, 8.49705831,
9.39148551, 10.2859127 , 11.18033989, 12.07476708, 12.96919427,
13.86362146, 14.75804865, 15.65247584, 16.54690303, 17.44133022,
18.33575742, 19.23018461, 20.1246118 , 21.01903899, 21.91346618],
[-3.57770876, -2.68328157, -1.78885438, -0.89442719, 0. ,
0.89442719, 1.78885438, 2.68328157, 3.57770876, 4.47213595,
5.36656315, 6.26099034, 7.15541753, 8.04984472, 8.94427191,
9.8386991 , 10.73312629, 11.62755348, 12.52198067, 13.41640786,
14.31083506, 15.20526225, 16.09968944, 16.99411663, 17.88854382,
18.78297101, 19.6773982 , 20.57182539, 21.46625258, 22.36067977],
[-3.13049517, -2.23606798, -1.34164079, -0.4472136 , 0.4472136 ,
1.34164079, 2.23606798, 3.13049517, 4.02492236, 4.91934955,
5.81377674, 6.70820393, 7.60263112, 8.49705831, 9.39148551,
10.2859127 , 11.18033989, 12.07476708, 12.96919427, 13.86362146,
14.75804865, 15.65247584, 16.54690303, 17.44133022, 18.33575742,
19.23018461, 20.1246118 , 21.01903899, 21.91346618, 22.80789337],
[-2.68328157, -1.78885438, -0.89442719, 0. , 0.89442719,
1.78885438, 2.68328157, 3.57770876, 4.47213595, 5.36656315,
6.26099034, 7.15541753, 8.04984472, 8.94427191, 9.8386991 ,
10.73312629, 11.62755348, 12.52198067, 13.41640786, 14.31083506,
15.20526225, 16.09968944, 16.99411663, 17.88854382, 18.78297101,
19.6773982 , 20.57182539, 21.46625258, 22.36067977, 23.25510697],
[-2.23606798, -1.34164079, -0.4472136 , 0.4472136 , 1.34164079,
2.23606798, 3.13049517, 4.02492236, 4.91934955, 5.81377674,
6.70820393, 7.60263112, 8.49705831, 9.39148551, 10.2859127 ,
11.18033989, 12.07476708, 12.96919427, 13.86362146, 14.75804865,
15.65247584, 16.54690303, 17.44133022, 18.33575742, 19.23018461,
20.1246118 , 21.01903899, 21.91346618, 22.80789337, 23.70232056],
[-1.78885438, -0.89442719, 0. , 0.89442719, 1.78885438,
2.68328157, 3.57770876, 4.47213595, 5.36656315, 6.26099034,
7.15541753, 8.04984472, 8.94427191, 9.8386991 , 10.73312629,
11.62755348, 12.52198067, 13.41640786, 14.31083506, 15.20526225,
16.09968944, 16.99411663, 17.88854382, 18.78297101, 19.6773982 ,
20.57182539, 21.46625258, 22.36067977, 23.25510697, 24.14953416],
[-1.34164079, -0.4472136 , 0.4472136 , 1.34164079, 2.23606798,
3.13049517, 4.02492236, 4.91934955, 5.81377674, 6.70820393,
7.60263112, 8.49705831, 9.39148551, 10.2859127 , 11.18033989,
12.07476708, 12.96919427, 13.86362146, 14.75804865, 15.65247584,
16.54690303, 17.44133022, 18.33575742, 19.23018461, 20.1246118 ,
21.01903899, 21.91346618, 22.80789337, 23.70232056, 24.59674775],
[-0.89442719, 0. , 0.89442719, 1.78885438, 2.68328157,
3.57770876, 4.47213595, 5.36656315, 6.26099034, 7.15541753,
8.04984472, 8.94427191, 9.8386991 , 10.73312629, 11.62755348,
12.52198067, 13.41640786, 14.31083506, 15.20526225, 16.09968944,
16.99411663, 17.88854382, 18.78297101, 19.6773982 , 20.57182539,
21.46625258, 22.36067977, 23.25510697, 24.14953416, 25.04396135],
[-0.4472136 , 0.4472136 , 1.34164079, 2.23606798, 3.13049517,
4.02492236, 4.91934955, 5.81377674, 6.70820393, 7.60263112,
8.49705831, 9.39148551, 10.2859127 , 11.18033989, 12.07476708,
12.96919427, 13.86362146, 14.75804865, 15.65247584, 16.54690303,
17.44133022, 18.33575742, 19.23018461, 20.1246118 , 21.01903899,
21.91346618, 22.80789337, 23.70232056, 24.59674775, 25.49117494]])
plt.quiver(new_x_grid
,new_y_grid
,new_x_grid
,new_y_grid
,product_values)
plt.ylim((15.5,-4.5))
(15.5, -4.5)
将每个像素位置的值进行可视化
plt.imshow(product_values)
plt.colorbar()
对符合某些条件的像素点进行筛选
- 假设我要挑选出那些 pixel 的位置,这些 pixels 满足:
- pixel 位置的矢量在
V
V
V 方向的长度大于
8
8
8 并且小于
20
20
20
# 图中黄色的点表示的就是那些符合条件的像素点
plt.imshow((product_values >=8) & (product_values <=20))