【发布时间】:2013-06-01 09:27:42
【问题描述】:
我有一个问题。我有一个 Matrix A,其整数值介于 0 和 5 之间。 例如:
x=randi(5,10,10)
现在我想调用一个过滤器,大小为 3x3,它给了我最常见的值
我尝试了两种解决方案:
fun = @(z) mode(z(:));
y1 = nlfilter(x,[3 3],fun);
这需要很长时间......
和
y2 = colfilt(x,[3 3],'sliding',@mode);
这也需要很长时间。 我有一些非常大的矩阵,两种解决方案都需要很长时间。 有没有更快的方法?
【问题讨论】:
-
模式过滤器总是很慢,因为它必须对值进行直方图然后寻找最常见的值 - 所以你最终会多次通过我们的数据。在“vanilla matlab”中实现,速度非常慢。通过为自己编写一个小的
mex例程,您可能会快得多 - 这是一个很容易上手的问题。需要指点吗? -
嗯...我从来没有写过 mex 例程...你知道我可以拿一个简单的例子吗?我会更容易上手。