例えば、
And @@ Thread[A >= B]
仕事をするべきです。
編集:一方、これは
cmp = Compile[
{
{a, _Integer, 1},
{b, _Integer, 1}
},
Module[
{flag = True},
Do[
If[Not[a[[p]] >= b[[p]]], flag = False; Break[]],
{p, 1, Length@a}];
flag],
CompilationTarget \[Rule] "C"
]
は 20 倍高速です。ただし、20倍も醜いです。
編集 2: David は C コンパイラを使用できないため、ここにすべてのタイミング結果を示しますが、2 つの違いがあります。まず、彼の 2 番目の方法は、すべての要素を比較するように修正されました。次に、a
それ自体と比較しますが、これは最悪のケースです (それ以外の場合、上記の 2 番目の方法では、条件に違反するために最初の要素まで比較するだけで済みます)。
(*OP's method*)
And @@ Table[a[[i]] >= b[[i]], {i, 10^6}] // Timing
(*acl's uncompiled method*)
And @@ Thread[a >= b] // Timing
(*Leonid's method*)
lessEqual[a, b] // Timing
(*David's method #1*)
NonNegative[Min[a - b]] // Timing
(*David's method #2*)
Timing[result = True;
n = 1; While[n < Length[a],
If[a[[n]] < b[[n]], result = False; Break[]];
n++]; result]
(*acl's compiled method*)
cmp[a, a] // Timing

したがって、コンパイルされた方法ははるかに高速です (David の 2 番目の方法とここでのコンパイルされた方法は同じアルゴリズムであり、唯一の違いはオーバーヘッドであることに注意してください)。
これらはすべてバッテリー電源で動作しているため、ランダムな変動がある可能性がありますが、代表的なものだと思います。
編集 3: ruebenko がコメントで示唆したように、このように に置き換えPart
た場合Compile`GetElement
cmp2 = Compile[{{a, _Integer, 1}, {b, _Integer, 1}},
Module[{flag = True},
Do[If[Not[Compile`GetElement[a, p] >= Compile`GetElement[b, p]],
flag = False; Break[]], {p, 1, Length@a}];
flag], CompilationTarget -> "C"]
thencmp2
は の 2 倍の速さcmp
です。