If statement 有解决办法吗?

If statement 有解决办法吗?,if-statement,replace,wolfram-mathematica,If Statement,Replace,Wolfram Mathematica,我是Mathematica的新手,我还有一个任务要解决,但我找不到答案。我有两个数字列表(“b”、“u”): 及 这是“b”和“u”的线形图 我需要将“b”中的前5个数字与“u”中的第一个数字进行比较,并始终保留最大值(将“b”替换为2个步骤)。但重叠的数字需要“记住”并在下一步进行比较,以便始终选择最大值(例如,第3、第4和第5个“b”必须大于第1和第2个“u”) 可能最简单的方法是在整个功能中覆盖图像中显示的最大值,但是我对这个软件是新手,我没有这样做的经验。不过,如果有人能找到一个可以实

我是Mathematica的新手,我还有一个任务要解决,但我找不到答案。我有两个数字列表(“b”、“u”):

这是“b”和“u”的线形图

我需要将“b”中的前5个数字与“u”中的第一个数字进行比较,并始终保留最大值(将“b”替换为2个步骤)。但重叠的数字需要“记住”并在下一步进行比较,以便始终选择最大值(例如,第3、第4和第5个“b”必须大于第1和第2个“u”)


可能最简单的方法是在整个功能中覆盖图像中显示的最大值,但是我对这个软件是新手,我没有这样做的经验。不过,如果有人能找到一个可以实现我上面所述功能的函数,那就太棒了。

我认为您的数据有一个小问题,
u
没有
分区[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]}]]
开始产生与你评论中相同的数字


像往常一样,从最里面的表达中分离出来,向外工作。

我相信这正是你想要的:

With[{n = Length @ u},
  Array[b[[#]] ~Max~ Take[u, ⌊{#-2, #+1}/2⌋ ~Clip~ {1, n}] &, 2 n + 3]
]
或者如果
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秒


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


bshift=Partition[b,5,2]看看这个结果,确定bshift中的每个组都是b中正确的5个数字,然后描述u的哪些元素和bshift中的第一个子列表以及结果应该是什么,然后描述u的哪些元素和bshift的第二个子列表以及结果应该是什么。我知道“Partition”函数,但我不知道如何将“b”赋值给正确的“u”。我最初的功能是这样的,我知道它不正确,但我正在尝试升级它yaproxmax=Table[If[b[[i]>u[[j]],b[[i]],uci[[j]],{i,1,61},{j,1,26}]'以使其记住结果并分配正确的数字。请给出此输入的预期输出,或至少其前六个位置的输出?我想我可以用几种不同的方式来解释这一点,我不想把时间浪费在错误的方面。嗨,当然可以。输出应如下所示:{8.734059001373602
,8.33058824111284
,5.620661156438947
,5.1929,5.55276,7.045821078656974
,5.55276,5.55276,9.749038328921163`,…}(始终将5个数字与u[1]进行比较,然后按2移位并与u[2]进行比较,…,很重要的一点是,例如,输出中的第5个数字被u[3]而不是u[2]替换,一开始计算会用u[2]替换它,但在下一步,它应该用u[3]替换它,因为它们重叠)。我无意中生成的“u”比预期的少,但现在它工作得很好!谢谢我想知道我是否可以将它改为最小值,所以我总是得到最小值“b”或“u”(类似于最大值)……我已经更改了它,但我想它并不像看起来那么容易……非常感谢,工作非常完美!我也需要对min做同样的事情,但我知道将“Max”改为“min”就行了,对吧?@seniorita不客气。是,仅将
Max
更改为
Min
应该是正确的。
{8.73406, 8.33051, 5.62067, 5.1929, 5.55276, 7.04582, 5.55276, 5.55276, 9.74904,--
With[{n = Length @ u},
  MapIndexed[# ~Max~ Take[u, ⌊(#2[[1]] + {-2, 1})/2⌋ ~Clip~ {1, n}] &, b]
]
u = RandomReal[{1, 1000}, 1500];
b = RandomReal[{1, 1000}, 3004];