构造矢量场的 x 方向的分量
构造矢量图的大小是
20
×
30
20 × 30
2 0 × 3 0
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)
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
x 1 , y 1 ) 让整个矢量图中的所有矢量和这个矢量做差
任选图中两点组成一个矢量
points_x = np. array( [ 10 , 20 ] )
points_y = np. array( [ 18 , 24 ] )
v = points_y - points_x
v
array([8, 4])
可视化矢量图和被减的矢量
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 )
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
2 0
plt. imshow( ( product_values >= 8 ) & ( product_values <= 20 ) )