Wolfram mathematica 在Mathematica中的条件查询/操作中添加约束

Wolfram mathematica 在Mathematica中的条件查询/操作中添加约束,wolfram-mathematica,conditional,average,threshold,Wolfram Mathematica,Conditional,Average,Threshold,我使用以下函数对列表执行条件操作: consider[data_, conditionCOL_, conditionVAL_, listOfCol_] := Select[data, (#[[conditionCOL]] == conditionVAL) &][[All, listOfCol]] 考虑以下例子: dalist = Join[Tuples[Range[4], 2]\[Transpose], {Range[16], Range[17, 32, 1]}

我使用以下函数对列表执行条件操作:

consider[data_, conditionCOL_, conditionVAL_, listOfCol_] :=
  Select[data, (#[[conditionCOL]] == conditionVAL) &][[All, listOfCol]]
考虑以下例子:

dalist = Join[Tuples[Range[4], 2]\[Transpose], {Range[16], Range[17, 32, 1]}
         ]\[Transpose];
我使用以下方法获取函数定义的特定列的平均值。 这将输出第3列和第4列条目的平均值,其中第1列中的对应条目等于2

Mean@consider[dalist, 1, 2, {3, 4}]
现在,我想对要平均的值添加约束/阈值:

当值为以下值时,求其平均值:

高于最小值,例如3 在最大值下,例如25 下面给出了在上述约束条件下应计算其平均值的值的示例


由于不清楚您是想从平均值中排除超出限制的点,还是决定是否执行平均值,我将解决这两个问题。您可以使用以下函数根据数据格式对您考虑的函数的结果进行后期处理:

filter[data : {{_, _} ..}, {min_, max_}] := 
   Select[data, min < #[[1]] < max && min < #[[2]] < max &]

dataWithinLimitsQ[data : {{_, _} ..}, {min_, max_}] := 
   data == filter[data, {min, max}]

meanFiltered[data : {{_, _} ..}, {min_, max_}] := 
   Mean@filter[data, {min, max}]
我将使用以下用例:


顺便说一句,在您的初始代码中,Select语句单独返回的正是您要查找的内容,因为MapThread[{1,2}&,…]和Transpose是完全相反的。@rcollyer,谢谢,我根据以下内容改编了它,我没有想到冗余!MapThread[Disk[{1,2},3]&,Transpose@Partition[Flatten@Union[选择[t4dataLAEH10,[[9]]==disp&][[All,54;;77]]],3]]假设您只需要前4个点,即{conditionCOL,conditionVAL}={1,1}。你期望从中得到什么样的平均值?有两种解释它的方法:两列都必须满足过滤标准,它给出了一个{4,20}的平均值,或者每个列都被独立过滤,它给出了一个{4,37/2}的平均值。当前的答案给出了前一个结果,而我怀疑你希望得到后一个结果。@rcollyer希望有一天我们能平分:谢谢你的投票。再次感谢你Leonid。我留下了一些未回答的问题,看看其他人是否感到鼓舞,但这正是我所需要的。不幸的是,OP数据的前两列是按该模式过滤的,并且它不直接允许对最后两列使用不同的过滤范围。作为另一种模式,我将使用{,,,,Mi1< < Max 1,,M.2 < < Max 2} @ @ RcLyje,我的预期是在考虑之后使用范围。您是否建议结合这些功能的解决方案?另外,500是否要求每个专栏有一个不同的范围?关于他到底想要什么,有一些模棱两可的地方,到目前为止,他还没有对我上面的评论做出回应。我的nit指的是这种模糊性,并不打算建议将这两项行动结合起来。顺便说一句,莱昂尼德的回答也是如此。另外,不,他并没有要求每个专栏有不同的范围,我只是在冒昧/主动。
In[365]:= dalist=Join[Tuples[Range[4],2]\[Transpose],{Range[16],Range[17,32,1]}]\[Transpose]
Out[365]= {{1,1,1,17},{1,2,2,18},{1,3,3,19},{1,4,4,20},{2,1,5,21},{2,2,6,22},{2,3,7,23},
{2,4,8,24},{3,1,9,25},{3,2,10,26},{3,3,11,27},{3,4,12,28},{4,1,13,29},{4,2,14,30},{4,3,15,31},
{4,4,16,32}}

In[378]:= considered = consider[dalist,1,1,{3,4}]

Out[378]= {{1,17},{2,18},{3,19},{4,20}}

In[379]:= filter[considered,{2,21}]

Out[379]= {{3,19},{4,20}}

In[380]:= dataWithinLimitsQ[considered,{2,21}]

Out[380]= False

In[381]:= meanFiltered[considered,{2,21}]

Out[381]= {7/2,39/2}
inRange[data_, {min_, max_}] := Cases[data, {__?(min < # < max &)}, 1]
dat = {{1, 2, 0}, {6, 7, 4}, {6, 7, 7}, {4, 5, 6}, {4, 5, 3}, {9, 7, 1}, {0, 3, 7}, {6, 2, 1}}

inRange[dat, {2, 7}]

(* Out = {{4, 5, 6}, {4, 5, 3}} *)