Skip to main content
Added test of effect of encountering a negative value early in the list
Source Link
Bob Hanlon
  • 167.4k
  • 7
  • 82
  • 213

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

EDIT: As suggested by mjw, encountering a negativenonpositive value early in the list significantly alters the results.

list2 = ReplacePart[list, 1000 -> -1]; (And @@ Positive[list2]) // AbsoluteTiming (*Hanlon*) (* {0.277642, False} *) VectorQ[list2, Positive] // AbsoluteTiming (*J.M.*) (* {0.000223, False} *) (AnyTrue[list2, Negative] // Not) // AbsoluteTiming (*Morbo*) (* {0.000262, False} *) And @@ (list2 /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (*Alrubaie*) (* {1.43026, False} *) 

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

EDIT: As suggested by mjw, encountering a negative value early in the list significantly alters the results.

list2 = ReplacePart[list, 1000 -> -1]; (And @@ Positive[list2]) // AbsoluteTiming (*Hanlon*) (* {0.277642, False} *) VectorQ[list2, Positive] // AbsoluteTiming (*J.M.*) (* {0.000223, False} *) (AnyTrue[list2, Negative] // Not) // AbsoluteTiming (*Morbo*) (* {0.000262, False} *) And @@ (list2 /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (*Alrubaie*) (* {1.43026, False} *) 

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

EDIT: As suggested by mjw, encountering a nonpositive value early in the list significantly alters the results.

list2 = ReplacePart[list, 1000 -> -1]; (And @@ Positive[list2]) // AbsoluteTiming (*Hanlon*) (* {0.277642, False} *) VectorQ[list2, Positive] // AbsoluteTiming (*J.M.*) (* {0.000223, False} *) (AnyTrue[list2, Negative] // Not) // AbsoluteTiming (*Morbo*) (* {0.000262, False} *) And @@ (list2 /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (*Alrubaie*) (* {1.43026, False} *) 
Added test of effect of encountering a negative value early in the list
Source Link
Bob Hanlon
  • 167.4k
  • 7
  • 82
  • 213

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

EDIT: As suggested by mjw, encountering a negative value early in the list significantly alters the results.

list2 = ReplacePart[list, 1000 -> -1]; (And @@ Positive[list2]) // AbsoluteTiming (*Hanlon*) (* {0.277642, False} *) VectorQ[list2, Positive] // AbsoluteTiming (*J.M.*) (* {0.000223, False} *) (AnyTrue[list2, Negative] // Not) // AbsoluteTiming (*Morbo*) (* {0.000262, False} *) And @@ (list2 /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (*Alrubaie*) (* {1.43026, False} *) 

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *) 

EDIT: As suggested by mjw, encountering a negative value early in the list significantly alters the results.

list2 = ReplacePart[list, 1000 -> -1]; (And @@ Positive[list2]) // AbsoluteTiming (*Hanlon*) (* {0.277642, False} *) VectorQ[list2, Positive] // AbsoluteTiming (*J.M.*) (* {0.000223, False} *) (AnyTrue[list2, Negative] // Not) // AbsoluteTiming (*Morbo*) (* {0.000262, False} *) And @@ (list2 /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (*Alrubaie*) (* {1.43026, False} *) 
Source Link
Bob Hanlon
  • 167.4k
  • 7
  • 82
  • 213

Since you have a very large list, you should look at the timing

list = RandomReal[1, 10^6]; (And @@ Positive[list]) // AbsoluteTiming (* Hanlon *) (* {0.050573, True} *) VectorQ[list, Positive] // AbsoluteTiming (* J.M. *) (* {0.261642, True} *) (AnyTrue[list, Negative] // Not) // AbsoluteTiming (* Morbo *) (* {0.324062, True} *) And @@ (list /. {x_?Negative -> False, x_?Positive -> True}) // AbsoluteTiming (* Alrubaie *) (* {1.00664, True} *)