python 矢量场的构造、计算;通过 matplotlib 作图、分析、筛选符合要求的像素点

  • 操作和演示环境:jupyter notebook

构造矢量场的 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))

在这里插入图片描述

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值