我是数学新手,我还有一项任务要做,但我找不到答案。我有两个数字列表("b","u"):
b = {8.734059001373602`, 8.330508824111284`, 5.620669156438947`,
1.4722145583571766`, 1.797504620275392`, 7.045821078656974`,
2.1437334927375247`, 2.295629405840401`, 9.749038328921163`,
5.9928406294151095`, 5.710839663259195`, 7.6983109942364365`,
1.02781847368645`, 4.909108426318685`, 2.5860897177525572`,
9.56334726886076`, 5.661774934433563`, 3.4927397824800384`,
0.4570000499566351`, 6.240122061193738`, 8.371962670138991`,
4.593105388706549`, 7.653068139076581`, 2.2715973346475877`,
7.6234743784167875`, 0.9177107503732636`, 3.182296027902268`,
6.196168580445633`, 0.1486794884986935`, 1.2920960388213274`,
7.478757220079665`, 9.610332785387424`, 0.05088141346751485`,
3.940557901075696`, 5.21881311050797`, 7.489624788199514`,
8.773397599406234`, 3.397275198258715`, 1.4847171141876618`,
0.06574278834161795`, 0.620801320529969`, 2.075457888143216`,
5.244608900551409`, 4.54384757203616`, 7.114276285060143`,
2.8878711430358344`, 5.70657733453041`, 8.759173986432632`,
1.9392596667256967`, 7.419234634325729`, 8.258205508179927`,
1.185315253730261`, 3.907753644335596`, 7.168561412289151`,
9.919881985898002`, 3.169835543867407`, 8.352858871046699`,
7.959492335118693`, 7.772764587074317`, 7.091413185764939`,
1.433673058797801`};和
u={5.1929, 3.95756, 5.55276, 3.97068, 5.67986, 4.57951, 4.12308,
2.52284, 6.58678, 4.32735, 7.08465, 4.65308, 3.82025, 5.01325,
1.17007, 6.43412, 4.67273, 3.7701, 4.10398, 2.90585, 3.75596,
5.12365, 4.78612, 7.20375, 3.19926, 8.10662};这是"b“和”u“的LinePlot;

我需要比较从"b“到"u”中的前5个数字,并始终保留最大值(将"b"<"u“替换为"u")。然后,我需要移动2个数字,并比较第3,4,5,6和7 "b“与第2 "u”等(移位总是=> 2步)。但是,重叠的数字需要“记住”并在下一步中进行比较,以便总是选择最大值(例如,第3、第4和第5 "b“必须大于第1和第2 "u")。
也许最简单的方法是在整个功能中覆盖图像中显示的最大值,但是我对这个软件并不熟悉,而且我没有这样做的经验。不过,如果有人知道如何使用我前面描述过的函数来实现这一点,那就太棒了。
发布于 2014-02-06 23:01:12
我相信这能做你想做的:
With[{n = Length @ u},
Array[b[[#]] ~Max~ Take[u, ⌊{#-2, #+1}/2⌋ ~Clip~ {1, n}] &, 2 n + 3]
]{8.73406,8.33051,5.62067,5.1929,5.55276,7.04582,5.55276,5.55276,9.74904
或者,如果u和v的长度适当匹配:
With[{n = Length @ u},
MapIndexed[# ~Max~ Take[u, ⌊(#2[[1]] + {-2, 1})/2⌋ ~Clip~ {1, n}] &, b]
]这些比Mark的解决方案快得多。有以下数据:
u = RandomReal[{1, 1000}, 1500];
b = RandomReal[{1, 1000}, 3004];马克的代码需要2.8秒,而我的代码需要0.014和0.015秒。
请在专用StackExchange站点上询问您未来的问题:

发布于 2014-02-06 19:26:35
我认为您的数据有一个小问题,u没有Partition[b,5,2]那么多的元素。我能做的最好的事情就是:
Max /@ Transpose[
Table[Map[If[# > 0, Max[#, u[[i]]], 0] &,
RotateRight[PadRight[Partition[b, 5, 2][[i]], Length[b]],
2 (i - 1)]], {i, 1, Length[u]}]]它开始产生与您的评论相同的数字。
和以往一样,把它从最里面的表情中分离出来,然后向外工作。
https://stackoverflow.com/questions/21586942
复制相似问题