【问题标题】:Do 1-D convolution along each row of a matrix沿矩阵的每一行进行一维卷积
【发布时间】:2015-03-27 02:28:21
【问题描述】:

快速搜索并找不到太多关于此的内容。假设我有一个二维矩阵和一个一维“响应函数”。我想将二维矩阵的每一行与响应函数进行卷积。我可以这样做:

for i=1:numrows
    answer(:,i) = conv(2dmatrix(:,i),response_function,'same');
end

但它超级慢!有什么提示可以加速这个吗?

谢谢

【问题讨论】:

  • 看起来你的代码卷积了2dmatrix的列?即2dmatrix(:,1)2dmatrix 的第一列。
  • 你是对的。行或列——问题都是一样的!

标签: matlab matrix convolution


【解决方案1】:

此代码在随机生成的矩阵上重现您的结果:

conv2(response_function,1,2dmatrix,'same')

conv2 允许您分别沿行和列进行卷积,因此不要对行执行任何操作,1,并通过 response_function 对列进行卷积。

要沿每一行进行卷积,请交换前两个函数参数的顺序。

【讨论】:

  • 如何沿一维卷积多维矩阵
  • @gota 我参加这个聚会有点晚了,但convn 可能会做你想做的事。
【解决方案2】:

conv2 的语法有些奇怪,我更喜欢使用convn for generalized n dimensional convolution. 当其中一个输入只是一个行向量时,其他所有维度的卷积本质上是与[1] 的卷积,所以它不会改变任何东西,仅沿每一行进行卷积。同样,如果您的矩阵与列向量进行卷积,那么它将沿每一列进行卷积。

answer = convn(2dmatrix, response_function);

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2019-01-20
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2016-12-09
    相关资源
    最近更新 更多