【发布时间】:2015-05-31 19:57:38
【问题描述】:
我正在寻找一些关于使用 CONVN 计算 3d 矩阵上的一维移动平均值的指导。我对内核在引擎盖下的翻转有点着迷,希望有人能够为我澄清这种行为。
还有一篇让我有点困惑的类似帖子:
问题:
我有不同来源位置的流域的每日河流和天气流量数据。
所以矩阵是这样的,
dim 1(行)代表每个站点 dim 2(列)代表日期 dim 3(页面)代表不同类型的测量(河流高度、流量、降雨量等)
我们的目标是尝试使用 CONVN 为每个变量的每个观察点在每个站点获取 21 天移动平均值。
据我了解,我应该能够使用内核,例如:
ker = ones(1,21) ./ 21.;
mat = randn(150,365*10,4);
avgmat = convn(mat,ker,'valid');
我试着玩弄并创建了另一个也应该可以工作的内核(我认为)并将 ker2 设置为:
ker2 = [zeros(1,21); ker; zeros(1,21)];
avgmat2 = convn(mat,ker2,'valid');
问题:
结果不太匹配,我想知道内核的尺寸是否不正确。非常感谢任何指导。
【问题讨论】:
-
嗨!我是回答您链接到的帖子的人。从上下文来看,您有一个 3D 矩阵,并且您希望在所有 3D 切片上独立地找到每一行的移动平均值。上面的代码应该可以工作(第一种情况)。但是,
valid返回一个矩阵,其大小在卷积边界方面是有效的。如果我正确解释了您的问题,请尝试使用same标志而不是valid标志。让我知道这是否有效。同时,您能否用一些示例数据更新您的帖子,说明您认为答案是什么以及 MATLAB 返回什么? -
顺便说一句,你有一个对称的内核,所以翻转应该对卷积输出没有影响。您指定的是标准移动平均内核,因此卷积应该可以按照您的预期找到移动平均线......但我有点困惑,因为您说上述方法不起作用!
-
您好。问题在于“有效”标志。我只是用手比较边缘的结果,并没有看到正确的结果。我现在几乎不想收回我的问题....
-
这完全取决于你:)。你的问题是一个有效的问题(不是双关语),它会绊倒很多人。如果您确实希望它保留下来,我可以写一个总结我们所讨论内容的答案。如果您想撤回/删除您的答案,那完全没有问题。告诉我你想做什么!
-
随意添加答案,我会标记为已解决。谢谢!
标签: matlab convolution