You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过scipy.signal.convolve2d实现向量化1D卷积操作

逐行1D卷积的2D向量化实现方案

问题1:构造m1、m2实现逐行对应卷积

前提:假设输入的d1、d2均为N行、每行长度为M的二维数组(即形状均为(N, M)),目标输出r的形状也为(N, M),每行对应原两个数组同位置行的1D卷积结果。

矩阵构造规则

  • m1直接使用d1的原始二维数组即可,形状保持(N, M)
  • m2构造为形状(2*N - 1, M)的稀疏矩阵:仅第N-1 + i行赋值为d2[i](i从0到N-1),其余所有行全部填0

调用方式

from scipy.signal import convolve2d
r = convolve2d(m1, m2, mode='same')

原理:2D卷积行方向的偏移为0时,刚好对应m1的第i行和m2的第N-1+i行(也就是d2[i])做列方向的1D卷积,行之间不会出现交叉累加,结果和逐行调用np.convolve完全一致。

问题2:构造矩阵实现相邻行卷积的向量化

前提:目标输出l1的形状为(N, M),其中l1[i] = np.convolve(d1[i], d1[i-1], mode='same'),默认i=0时d1[-1]取d1的最后一行,如果需要i=0时边界补0,可自行在d1顶部插入一行全0向量再计算。

矩阵构造规则

  • 输入矩阵直接使用d1的原始二维数组即可
  • 卷积核构造为形状(2*N -1, M)的稀疏矩阵:仅第N + i行赋值为d1[i](i从0到N-1),其余所有行全部填0

调用方式

from scipy.signal import convolve2d
l1 = convolve2d(d1, kernel, mode='same')

原理:2D卷积行方向偏移为-1时,刚好对应m1的第i行和核中的d1[i-1]做列方向的1D卷积,满足相邻行卷积的需求。如果实际测试出现行偏移错位,可根据边界规则调整核有效行的放置位置即可。

内容的提问来源于stack exchange,提问作者yupbank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:04