如何在Mathematica中找到列表的局部最小值和最大值?

3
我有干扰图像,需要计算其可见度。为此,我必须找到强度“振荡”的最小值和最大值。
我已经使用FindPeaks函数找到了最大值,但不知道如何找到最小值。 enter image description here
img = Import["/home/martin/Dokumentumok/Egyetem/4. félév/Modern fizika labor/15. Kvantumradí­r/Képek/1a.JPG"];
dat = ParallelSum[ImageData[img, "Byte"][[n]], {n, 3456}];
peaks = N[FindPeaks[dat, 1.2, 1.2, 90000]];
Show[{ListLinePlot[dat, AxesLabel -> {"Pixel", "Intenzitas"},ImageSize -> Full, PlotTheme -> "Classic"], ListPlot[Tooltip[peaks], PlotStyle -> {PointSize[0.006], Red}]}]

如果我将鼠标悬停在红点上,会显示强度值和位置。如果我能用类似于FindPeaks的函数做同样的事情来找到最小值,那就太好了。但不幸的是我找不到这样的函数。有什么方法可以解决吗?
1个回答

6

寻找最小值的一个古老技巧是找到数据的-1倍的最大值。

data = {1, 3, 1, 3};FindPeaks[data]

这提供了

{{2, 3}, {4, 3}}

为了最小化使用,使用数据的否定形式。
FindPeaks[-data]

这提供了

{{1, -1}, {3, -1}}

水平位置是正确的,但垂直位置是相反的。因此,请将那些y值乘以-1。

Map[({x, y} = #; {x, -y}) &, FindPeaks[-data]]

这提供了

{{1, 1}, {3, 1}}

注意:# 和 & 是Mathematica的一种简写方式,用来定义一个以#为参数名的小型函数。对于新用户来说可能有些困惑,但一旦理解就能快速书写并且易于使用。

2
文档使用相同的技巧来寻找山谷:http://www.wolfram.com/mathematica/new-in-10/enhanced-sound-and-signal-processing/valley-detection.html - soegaard
啊,好的。谢谢你。我在仔细阅读FindPeaks的文档页面时没有找到它。我本来期望能在那里找到它藏着。 - Bill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接