首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数学解?

数学解?
EN

Stack Overflow用户
提问于 2014-02-05 19:43:03
回答 2查看 112关注 0票数 1

我是数学新手,我还有一项任务要做,但我找不到答案。我有两个数字列表("b","u"):

代码语言:javascript
复制
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`};

代码语言:javascript
复制
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")。

也许最简单的方法是在整个功能中覆盖图像中显示的最大值,但是我对这个软件并不熟悉,而且我没有这样做的经验。不过,如果有人知道如何使用我前面描述过的函数来实现这一点,那就太棒了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-06 23:01:12

我相信这能做你想做的:

代码语言:javascript
复制
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

或者,如果uv的长度适当匹配:

代码语言:javascript
复制
With[{n = Length @ u},
  MapIndexed[# ~Max~ Take[u, ⌊(#2[[1]] + {-2, 1})/2⌋ ~Clip~ {1, n}] &, b]
]

这些比Mark的解决方案快得多。有以下数据:

代码语言:javascript
复制
u = RandomReal[{1, 1000}, 1500];
b = RandomReal[{1, 1000}, 3004];

马克的代码需要2.8秒,而我的代码需要0.014和0.015秒。

请在专用StackExchange站点上询问您未来的问题:

票数 1
EN

Stack Overflow用户

发布于 2014-02-06 19:26:35

我认为您的数据有一个小问题,u没有Partition[b,5,2]那么多的元素。我能做的最好的事情就是:

代码语言:javascript
复制
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]}]]

它开始产生与您的评论相同的数字。

和以往一样,把它从最里面的表情中分离出来,然后向外工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21586942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档