矩阵卷积运算过程讲解「建议收藏」

矩阵卷积运算过程讲解「建议收藏」在爬虫处理验证码的过程中接触到矩阵卷积运算,关于该类运算,记录一下自己的心得。理论知识在讲述卷积过程前,我们来了解一下卷积公式。根据离散二维卷积公式:其中A为被卷积矩阵,K为卷积核,B为卷积结果,该公式中,三个矩阵的排序均从0开始。现在对于上面卷积过程进行分析:我们用来做例子的A矩阵为m×m(3×3)二维矩阵(被卷积矩阵),K为n×n(2×2)的二维矩阵(卷积核)。卷……

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站,未来我们一起交流进步。

在爬虫处理验证码的过程中接触到矩阵卷积运算,关于该类运算,记录一下自己的心得。

理论知识

在讲述卷积过程前,我们来了解一下卷积公式。根据离散二维卷积公式:
在这里插入图片描述
其中A为被卷积矩阵,K为卷积核,B为卷积结果,该公式中,三个矩阵的排序均从0开始。

现在对于上面卷积过程进行分析:我们用来做例子的 A 矩阵为 m×m(3×3)二维矩阵(被卷积矩阵),K 为 n×n(2×2)的二维矩阵(卷积核)。
在这里插入图片描述
在这里插入图片描述

  1. 卷积核 K 矩阵翻转 180°,得到:
    在这里插入图片描述

  2. 被卷积矩阵扩展到(m+n)×(m+n)大小,将扩展部分用 0 代替,将卷积核 K 从左上角顺序地行移动,再换行,继续,直到抵达右下角。将对应元素相乘后相加。

在这里插入图片描述
在这里插入图片描述

  1. 依次类推,剔除为 0 的元素,5×5 矩阵结果为 4×4 矩阵,卷积计算结束。
    在这里插入图片描述

实际应用

关于卷积计算,在 Python 中存在于 scipy 的 signal 模块,这里需要介绍一下 scipy.signal.convolve2d 函数。

scipy.signal.convolve2d(in1,in2,mode ='full',boundary ='fill',fillvalue = 0 )

Jetbrains全家桶1年46,售后保障稳定

  • in1 : array_like 被卷积矩阵
  • in2 : array_like 卷积核
  • mode : str {‘full’, ‘valid’, ‘same’}, 可选 。其中 full 表示输出是输入的完全离散线性卷积(默认);valid 表示输出仅包含那些不依赖于零填充的元素。在“有效”模式下,in1 或 in2 必须至少与每个维度中的另一个一样大。same 表示输出与 in1 的大小相同,以“完整”输出为中心。
  • boundary : str {‘fill’,‘wrap’,‘symm’},可选,指示如何处理边界的标志。fill 表示使用 fillvalue 填充输入数组(默认);wrap 表示圆形边界条件;symm 表示对称的边界条件。
  • fillvalue : 标量,可选。填充 pad 输入数组的值。默认值为 0。
from scipy import signal
import numpy as np

x = np.array([[1, 2],
              [3, 4]])

b = []
a = []
for i in range(1,10):
    if i%3 == 0:
        a.append(i)
        b.append(a)
        a = []
        continue
    else:
        a.append(i)
print(np.array(b))

h = np.array(b)

print(signal.convolve2d(h, x, mode='same'))
print(signal.convolve2d(h, x, mode='full'))
print(signal.convolve2d(h, x, mode='valid'))

输出结果为:

[[ 1  4  7]
 [ 7 23 33]
 [19 53 63]]
[[ 1  4  7  6]
 [ 7 23 33 24]
 [19 53 63 42]
 [21 52 59 36]]
[[23 33]
 [53 63]]

结合程序与图片分析,被卷积矩阵(m×m)和卷积核(n×n)做卷积运算时,当 scipy.signal.convolve2d 函数中 mode 参数值为 full(默认值)时,得到是完全卷积结果;当 mode 参数值为 valid 时,输出计算过程中没有扩充的 0 参与计算的值;当 mode 参数值为 same 时,输出与被卷积矩阵大小相同的矩阵,按照我的理解是,当卷积结果矩阵的大小(m+n -1)为偶数时,same 输出的矩阵从左上角按照 m 大小截取。当卷积结果矩阵的大小(m+n -1)为奇数时,same 输出的矩阵从正中间截取大小为 m d的矩阵。
在这里插入图片描述

注意:假如被卷积矩阵(3×3)和卷积核(3×3)做卷积运算时,6×6 矩阵扩充时,扩充结果如下:

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223454.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 60mph和kmh换算_mph换算器(速度计算器在线)「建议收藏」

    60mph和kmh换算_mph换算器(速度计算器在线)「建议收藏」mph是英里每时的意思吗?如何换算成千米每时?100mph=160.9kmhmph是英里每时的意思吗?如何换算成千米每时?mph是米/小时的意思mitersperhour也可写成m/hAkm/h=A*1000m/h玩极品飞车12,上面的速度是mph,怎么换算啊1英里=5280英尺=63360英寸=1609.344米汽车速度表上,英制的MPH与公制的km/…

    2022年6月28日
    85
  • webpack图片压缩_webpack的cdn

    webpack图片压缩_webpack的cdn图片处理url-loader(webpack5之前的处理方式)在项目开发中,我们时长会需要使用到图片,比如在img文件夹中有图片test1.png,然后在normal.css中会引用到图片body

    2022年7月30日
    6
  • UVa – The 3n + 1 problem 解读

    UVa – The 3n + 1 problem 解读

    2022年1月6日
    40
  • 图像处理—-lena图像的由来「建议收藏」

    图像处理—-lena图像的由来「建议收藏」作者: 邓亮来源http://kexuesongshuhui.blog.163.com/blog/static/935965672009626101158405/?163toutiao 她是让无数专家为之痴迷和痛苦的研究对象,她是充斥着枯燥数学公式的论文中最吸引眼球的光芒,翻开任何一本关于计算机图像处理的教材,你都能看到她动人的微笑。她就是雷娜(Lena),她的照片是图像处理领域使用最

    2022年6月19日
    32
  • CentOS如何增加虚拟内存?「建议收藏」

    CentOS如何增加虚拟内存?「建议收藏」swap分区的创建1、查看磁盘使用情况2、添加Swap分区使用dd命令创建名为swapfile的swap交换文件(文件名和目录任意):3、对交换文件格式化并转换为swap分区4、挂载并激活分区5、查看新swap分区是否正常添加并激活使用6、修改fstab配置,设置开机自动挂载该分区7、查看是否已经使用了交换内存更改Swap配置查看当前的swappiness数值…

    2022年9月27日
    5
  • java标识符有哪些_java标识符有哪些?java标识符有哪些不合法?

    java标识符有哪些_java标识符有哪些?java标识符有哪些不合法?问题:下面哪个标识符是合法的?”1HelloWorld””_HelloWorld””Hello*World””Hello$World”答案:4解析:标识符是以字母开头的字母数字序列:数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字;字母、数字等字符的任意组合,不能包含+、-*等字符;不能使用关键字;大小写敏感拓展:1、java标识…

    2022年7月26日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号