![]() |
在向量中找到合理的(无噪声)最大元素
考虑一个充满噪声元素的向量[B]V。[/B]找到合理的最大元素的最快(或任何一种)方法是什么?
例如 V = [1 2 3 4 100 1000] rmax = 4; 我当时正在考虑对元素进行排序,并找到第二个差异{即diff(diff(diff(unique(V)))}}。 编辑:对不起,延迟。 我无法发布任何代表数据,因为它包含6.15e5元素。但这是排序元素的图。 [URL="https://i.stack.imgur.com/jdJIT.jpg"][IMG]https://i.stack.imgur.com/jdJIT.jpg[/IMG][/URL] 只看图,分段线性函数可能起作用。 无论如何,关于我以前关于使用微分的猜想,这是diff(sort(V)); [URL="https://i.stack.imgur.com/ND2Gi.jpg"][IMG]https://i.stack.imgur.com/ND2Gi.jpg[/IMG][/URL] 我希望现在更加清楚。 编辑:只是要清楚,所需的“最大”值将是排序的元素图中的步骤之前的值。 回答: [B]新答案:[/B] 根据您的排序幅度图,您的diff(sort(V))算法可能会很好地工作。您只需要为构成“太大”的排序值之间的差异选择一个阈值。然后,使用diff(sort(V))向量中超过该阈值的第一点来获取要用于V的阈值。例如: diffThreshold = 2e5; sortedVector = sort(V); index = find(diff(sortedVector) > diffThreshold,1,'first'); signalThreshold = sortedVector(index); 如果您有兴趣使用它,另一种选择是使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/histc.html"]HISTC[/URL]对数据进行[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/histc.html"]装箱[/URL] 。您最终将获得高振幅的低和高幅度的垃圾箱组,介于它们之间的是稀疏的垃圾箱。然后就可以确定要算作低振幅组的一部分的仓(例如,至少包含X个计数的仓的第一组)。例如: binEdges = min(V):1e7:max(V); % Create vector of bin edges n = histc(V,binEdges); % Bin amplitude data binThreshold = 100; % Pick threshold for number of elements in bin index = find(n < binThreshold,1,'first'); % Find first bin whose count is low signalThreshold = binEdges(index); [B]旧答案(供后代使用):[/B] 找到“合理的最大元素”完全取决于您对[I]合理[/I]的定义。您可以通过多种方式将一个点定义为[I]离群值[/I] ,例如仅选择一组阈值并忽略定义为“合理”的所有内容。假设您的数据具有正态分布,则可以使用简单的数据驱动阈值方法使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mean.html"]MEAN[/URL]和[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/std.html"]STD[/URL]函数从向量V去除异常值: nDevs = 2; % The number of standard deviations to use as a threshold index = abs(V-mean(V)) |
所有时间均为北京时间。现在的时间是 23:25。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.