Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select Mathematica中比较相邻元素的“选择”_Select_Wolfram Mathematica - Fatal编程技术网

Select Mathematica中比较相邻元素的“选择”

Select Mathematica中比较相邻元素的“选择”,select,wolfram-mathematica,Select,Wolfram Mathematica,在Mathematica中,Select命令仅允许为列表中的每个元素单独定义一个选择标准 我想指定一个标准,它分别依赖于前一个和/或下一个元素的函数和所有元素的函数。第一个和最后一个元素不能以这种方式进行测试,但无论如何都应该选择它们 迭代地这样做可能不会有问题,我想先尝试一下函数式 我会像这样使用它: Select[list,FirstQ||LastQ,Func1[#-1,#]&&Func2[#,#1]&&Func3[list]&] 我建议使用配分函数

在Mathematica中,Select命令仅允许为列表中的每个元素单独定义一个选择标准

我想指定一个标准,它分别依赖于前一个和/或下一个元素的函数和所有元素的函数。第一个和最后一个元素不能以这种方式进行测试,但无论如何都应该选择它们

迭代地这样做可能不会有问题,我想先尝试一下函数式

我会像这样使用它:

Select[list,FirstQ||LastQ,Func1[#-1,#]&&Func2[#,#1]&&Func3[list]&]

我建议使用配分函数。要将列表中的每个元素与其近邻分组,可以执行以下操作

Partition[{a,b,c,d,e}, 3, 1]
要获得此信息:

{{a,b,c}, {b,c,e}, {c,d,e}}
知道了这一点,我们可以创建一个与您的规范大致匹配的select with Neights函数:

SelectWN[list_, firstq_, lastq_, trinaryfunc_] := Join[
  If[firstq, {First@list}, {}], 
  Select[Partition[list, 3, 1], trinaryfunc@@#&][[All,2]], 
  If[lastq, {Last@list}, {}]]
请注意,在trinaryfunc的参数中,2是列表元素本身,1是左邻居,3是右邻居。
将其推广到使用任意数量的邻居,而不仅仅是直接邻居,这将是一件好事,但是您可能需要一种比{1,2,3}的模拟更好的方法来引用它们。

谢谢您的大力帮助。我用它来解决另一个问题。问题是我意识到我的前提是错的。我不能以那种静态的方式做我想象的事情。从左到右迭代,我需要检查所有3个组,是的,但是如果trinaryfunc条件不成立,我将踢出元素n,并使用由元素n-1、n+1和n+2组成的新3个组重复testcondition。也许我可以重复SelectWN函数,直到不再发生变化,但这将导致最后3组的重复计算。我想迭代方法就是这里要用到的方法。