Mathematicaにリスト内のすべての整数が設定された数より少ないかどうかを判断する方法はありますか?たとえば、リスト内のすべての数字が10未満であるかどうかを知りたい場合:Mathematica:リスト内のすべての整数が数値より小さいかどうかを調べる
theList = {1, 2, 3, 10};
magicFunction[theList, 10]; --> returns False
ありがとうございました。
Mathematicaにリスト内のすべての整数が設定された数より少ないかどうかを判断する方法はありますか?たとえば、リスト内のすべての数字が10未満であるかどうかを知りたい場合:Mathematica:リスト内のすべての整数が数値より小さいかどうかを調べる
theList = {1, 2, 3, 10};
magicFunction[theList, 10]; --> returns False
ありがとうございました。
リストではMax functionを探します。これはリストの中で最大の数字を返します。そこから、この値が特定の数よりも小さいかどうかを調べることができます。
試験のこの種の「フォールド」使用して構築することが容易である。
magicFunction[ lst_, val_ ] :=
Fold[ ((#2 < val) && #1) &, True, lst ]
フレーズ「(#2 <ヴァル)」各リスト要素のテストである(「#2」)。あなたが望むテストをここに置くことができるので、Maxのようなリスト可能な関数よりも強力なテストを行うことができます。
'& &#1'は、現在の要素の結果とすべての以前の要素の結果を結合します。
「True」は基本ケースです。空のリストの結果です。
、それがどのように動作するかを確認するには、いくつかの未定義の値を渡すと、式はに展開ものを見ることができます:私の解決策は私が前の二つのソリューションをコメントしてみましょう提供する前に
In[10]:= magicFunction[ {a, b, c}, 10 ]
Out[10]= c < 10 && b < 10 && a < 10
。 Joey Robertの解決策magicFunction1とEricの解決策magicFunction2を呼び出します。
magicFunction1は非常に短くエレガントです。私が気に入っていないのは、非常に大きなリストがあり、最初のものがすでに10より大きい場合、必要でない最大の数を計算するすべての作業をやり遂げるということです。
magicFunction3[lst_, val_] :=
Position[# < val & /@ lst, False, 1, 1] == {}
と
私は、だから私の最高の答えはmagicFunction4あるIn[1]:= data = Table[RandomInteger[{1, 10}], {10000000}];
In[2]:= Timing[magicFunction1[data, 10]]
Out[2]= {0.017551, False}
In[2]:= Timing[magicFunction2[data, 10]]
Out[2]= {10.0173, False}
In[2]:= Timing[magicFunction3[data, 10]]
Out[2]= {7.10192, False}
In[2]:= Timing[magicFunction4[data, 10]]
Out[2]= {0.402562, False}
を発見したベンチマークを行う
magicFunction4[lst_, val_] :=
Cases[lst, x_ /; x >= val, 1, 1] == {}
:これはまた、私は、次の2つのソリューションを開発しmagicFunction2
に適用されます私はまだそれがなぜmagicFunction1よりも遅いのか分からない。私はまた、magicFunction3とmagicFunction4の間に大きなパフォーマンスの違いがある理由を無視します。
ありがとう、良いアイデア。 – Nope
「magicFunction [lst_、val_]:= Max [lst]
dreeves