How to check is there any negative term in a large list?Issue with very large lists in MathematicaHow to check if all the members of list lies in specific rangeQuery Dataset to check if row contains any from a set of valuesDeleting any list that contains a negative numberDefining a function that detects square matricesHow to use Contains functions on matrices?Ordering real numeric quantitiescount the pairs in a set of DataSpeed up Flatten[] of a large nested listHow to check expression depends on symbol in a particular way

How to format long polynomial?

How to write a macro that is braces sensitive?

Is a tag line useful on a cover?

What typically incentivizes a professor to change jobs to a lower ranking university?

Why don't electron-positron collisions release infinite energy?

Why doesn't H₄O²⁺ exist?

What is the offset in a seaplane's hull?

Today is the Center

How old can references or sources in a thesis be?

The use of multiple foreign keys on same column in SQL Server

Why does Kotter return in Welcome Back Kotter?

What would happen to a modern skyscraper if it rains micro blackholes?

Test whether all array elements are factors of a number

Mage Armor with Defense fighting style (for Adventurers League bladeslinger)

What's the output of a record cartridge playing an out-of-speed record

Theorems that impeded progress

How does one intimidate enemies without having the capacity for violence?

Show that if two triangles built on parallel lines, with equal bases have the same perimeter only if they are congruent.

Problem of parity - Can we draw a closed path made up of 20 line segments...

Why, historically, did Gödel think CH was false?

How can I make my BBEG immortal short of making them a Lich or Vampire?

Why are electrically insulating heatsinks so rare? Is it just cost?

Is this a crack on the carbon frame?

Why can't I see bouncing of a switch on an oscilloscope?



How to check is there any negative term in a large list?


Issue with very large lists in MathematicaHow to check if all the members of list lies in specific rangeQuery Dataset to check if row contains any from a set of valuesDeleting any list that contains a negative numberDefining a function that detects square matricesHow to use Contains functions on matrices?Ordering real numeric quantitiescount the pairs in a set of DataSpeed up Flatten[] of a large nested listHow to check expression depends on symbol in a particular way













8












$begingroup$


I want to check if a data set of size $10^10$ contains any non-positive elements. Positive[Name of dataset] returns a list of True and False of length $10^10$. I want only a single True if all terms of that dataset are positive and False otherwise.










share|improve this question











$endgroup$







  • 3




    $begingroup$
    VectorQ[list, Positive]?
    $endgroup$
    – J. M. is away
    Mar 27 at 14:26






  • 1




    $begingroup$
    Use Apply as in And @@ Positive[list]
    $endgroup$
    – Bob Hanlon
    Mar 27 at 14:52










  • $begingroup$
    How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
    $endgroup$
    – Roman
    Mar 27 at 15:01















8












$begingroup$


I want to check if a data set of size $10^10$ contains any non-positive elements. Positive[Name of dataset] returns a list of True and False of length $10^10$. I want only a single True if all terms of that dataset are positive and False otherwise.










share|improve this question











$endgroup$







  • 3




    $begingroup$
    VectorQ[list, Positive]?
    $endgroup$
    – J. M. is away
    Mar 27 at 14:26






  • 1




    $begingroup$
    Use Apply as in And @@ Positive[list]
    $endgroup$
    – Bob Hanlon
    Mar 27 at 14:52










  • $begingroup$
    How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
    $endgroup$
    – Roman
    Mar 27 at 15:01













8












8








8


2



$begingroup$


I want to check if a data set of size $10^10$ contains any non-positive elements. Positive[Name of dataset] returns a list of True and False of length $10^10$. I want only a single True if all terms of that dataset are positive and False otherwise.










share|improve this question











$endgroup$




I want to check if a data set of size $10^10$ contains any non-positive elements. Positive[Name of dataset] returns a list of True and False of length $10^10$. I want only a single True if all terms of that dataset are positive and False otherwise.







list-manipulation expression-test






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 27 at 19:01









mjw

1,26810




1,26810










asked Mar 27 at 13:57









a ba b

712




712







  • 3




    $begingroup$
    VectorQ[list, Positive]?
    $endgroup$
    – J. M. is away
    Mar 27 at 14:26






  • 1




    $begingroup$
    Use Apply as in And @@ Positive[list]
    $endgroup$
    – Bob Hanlon
    Mar 27 at 14:52










  • $begingroup$
    How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
    $endgroup$
    – Roman
    Mar 27 at 15:01












  • 3




    $begingroup$
    VectorQ[list, Positive]?
    $endgroup$
    – J. M. is away
    Mar 27 at 14:26






  • 1




    $begingroup$
    Use Apply as in And @@ Positive[list]
    $endgroup$
    – Bob Hanlon
    Mar 27 at 14:52










  • $begingroup$
    How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
    $endgroup$
    – Roman
    Mar 27 at 15:01







3




3




$begingroup$
VectorQ[list, Positive]?
$endgroup$
– J. M. is away
Mar 27 at 14:26




$begingroup$
VectorQ[list, Positive]?
$endgroup$
– J. M. is away
Mar 27 at 14:26




1




1




$begingroup$
Use Apply as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
Mar 27 at 14:52




$begingroup$
Use Apply as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
Mar 27 at 14:52












$begingroup$
How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
$endgroup$
– Roman
Mar 27 at 15:01




$begingroup$
How do you want to deal with terms that are exactly zero? Do you need all terms to be positive (use Positive), or do you need all terms to be zero or positive (use NonNegative)?
$endgroup$
– Roman
Mar 27 at 15:01










4 Answers
4






active

oldest

votes


















13












$begingroup$

Alternate solution:



list = RandomReal[1, 10^6];
Min[list] >= 0





share|improve this answer









$endgroup$








  • 3




    $begingroup$
    ...i.e. NonNegative[Min[list]].
    $endgroup$
    – J. M. is away
    Mar 27 at 16:08






  • 3




    $begingroup$
    Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
    $endgroup$
    – Henrik Schumacher
    Mar 27 at 18:01






  • 2




    $begingroup$
    This is about 100 times faster than any of the other solutions. Impressive!
    $endgroup$
    – Roman
    Mar 27 at 20:03










  • $begingroup$
    Thank you very much.
    $endgroup$
    – a b
    Mar 28 at 8:40


















9












$begingroup$

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 *)





share|improve this answer











$endgroup$












  • $begingroup$
    Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
    $endgroup$
    – mjw
    Mar 27 at 15:34






  • 1




    $begingroup$
    Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
    $endgroup$
    – mjw
    Mar 27 at 15:37






  • 1




    $begingroup$
    @mjw, And[] does short-circuit evaluation.
    $endgroup$
    – J. M. is away
    Mar 27 at 15:41






  • 1




    $begingroup$
    @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
    $endgroup$
    – mjw
    Mar 27 at 16:03






  • 1




    $begingroup$
    @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
    $endgroup$
    – J. M. is away
    Mar 27 at 16:06


















4












$begingroup$

Ah, maybe this is too simple, but works for exactly what you're doing:



data = Table[RandomReal[-1,1],i,1,1000];
AnyTrue[data,Negative] // Not
(*False*)

data2 = Table[RandomReal[], i, 1, 10^2];
AnyTrue[data2, Negative] // Not
(*True*)





share|improve this answer











$endgroup$












  • $begingroup$
    AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
    $endgroup$
    – Roman
    Mar 27 at 14:55










  • $begingroup$
    @Roman - the poster is using AnyTrue not AllTrue
    $endgroup$
    – Bob Hanlon
    Mar 27 at 15:00






  • 1




    $begingroup$
    Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
    $endgroup$
    – Roman
    Mar 27 at 15:04











  • $begingroup$
    ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
    $endgroup$
    – morbo
    Mar 27 at 15:04


















3












$begingroup$

list = 1, 2, 3, 4, -5, -6, -7;

list /. x_?Negative -> True, x_?Positive -> False





share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "387"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f194043%2fhow-to-check-is-there-any-negative-term-in-a-large-list%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    4 Answers
    4






    active

    oldest

    votes








    4 Answers
    4






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    13












    $begingroup$

    Alternate solution:



    list = RandomReal[1, 10^6];
    Min[list] >= 0





    share|improve this answer









    $endgroup$








    • 3




      $begingroup$
      ...i.e. NonNegative[Min[list]].
      $endgroup$
      – J. M. is away
      Mar 27 at 16:08






    • 3




      $begingroup$
      Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
      $endgroup$
      – Henrik Schumacher
      Mar 27 at 18:01






    • 2




      $begingroup$
      This is about 100 times faster than any of the other solutions. Impressive!
      $endgroup$
      – Roman
      Mar 27 at 20:03










    • $begingroup$
      Thank you very much.
      $endgroup$
      – a b
      Mar 28 at 8:40















    13












    $begingroup$

    Alternate solution:



    list = RandomReal[1, 10^6];
    Min[list] >= 0





    share|improve this answer









    $endgroup$








    • 3




      $begingroup$
      ...i.e. NonNegative[Min[list]].
      $endgroup$
      – J. M. is away
      Mar 27 at 16:08






    • 3




      $begingroup$
      Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
      $endgroup$
      – Henrik Schumacher
      Mar 27 at 18:01






    • 2




      $begingroup$
      This is about 100 times faster than any of the other solutions. Impressive!
      $endgroup$
      – Roman
      Mar 27 at 20:03










    • $begingroup$
      Thank you very much.
      $endgroup$
      – a b
      Mar 28 at 8:40













    13












    13








    13





    $begingroup$

    Alternate solution:



    list = RandomReal[1, 10^6];
    Min[list] >= 0





    share|improve this answer









    $endgroup$



    Alternate solution:



    list = RandomReal[1, 10^6];
    Min[list] >= 0






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Mar 27 at 16:06









    sakrasakra

    2,7081429




    2,7081429







    • 3




      $begingroup$
      ...i.e. NonNegative[Min[list]].
      $endgroup$
      – J. M. is away
      Mar 27 at 16:08






    • 3




      $begingroup$
      Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
      $endgroup$
      – Henrik Schumacher
      Mar 27 at 18:01






    • 2




      $begingroup$
      This is about 100 times faster than any of the other solutions. Impressive!
      $endgroup$
      – Roman
      Mar 27 at 20:03










    • $begingroup$
      Thank you very much.
      $endgroup$
      – a b
      Mar 28 at 8:40












    • 3




      $begingroup$
      ...i.e. NonNegative[Min[list]].
      $endgroup$
      – J. M. is away
      Mar 27 at 16:08






    • 3




      $begingroup$
      Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
      $endgroup$
      – Henrik Schumacher
      Mar 27 at 18:01






    • 2




      $begingroup$
      This is about 100 times faster than any of the other solutions. Impressive!
      $endgroup$
      – Roman
      Mar 27 at 20:03










    • $begingroup$
      Thank you very much.
      $endgroup$
      – a b
      Mar 28 at 8:40







    3




    3




    $begingroup$
    ...i.e. NonNegative[Min[list]].
    $endgroup$
    – J. M. is away
    Mar 27 at 16:08




    $begingroup$
    ...i.e. NonNegative[Min[list]].
    $endgroup$
    – J. M. is away
    Mar 27 at 16:08




    3




    3




    $begingroup$
    Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
    $endgroup$
    – Henrik Schumacher
    Mar 27 at 18:01




    $begingroup$
    Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
    $endgroup$
    – Henrik Schumacher
    Mar 27 at 18:01




    2




    2




    $begingroup$
    This is about 100 times faster than any of the other solutions. Impressive!
    $endgroup$
    – Roman
    Mar 27 at 20:03




    $begingroup$
    This is about 100 times faster than any of the other solutions. Impressive!
    $endgroup$
    – Roman
    Mar 27 at 20:03












    $begingroup$
    Thank you very much.
    $endgroup$
    – a b
    Mar 28 at 8:40




    $begingroup$
    Thank you very much.
    $endgroup$
    – a b
    Mar 28 at 8:40











    9












    $begingroup$

    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 *)





    share|improve this answer











    $endgroup$












    • $begingroup$
      Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
      $endgroup$
      – mjw
      Mar 27 at 15:34






    • 1




      $begingroup$
      Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
      $endgroup$
      – mjw
      Mar 27 at 15:37






    • 1




      $begingroup$
      @mjw, And[] does short-circuit evaluation.
      $endgroup$
      – J. M. is away
      Mar 27 at 15:41






    • 1




      $begingroup$
      @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
      $endgroup$
      – mjw
      Mar 27 at 16:03






    • 1




      $begingroup$
      @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
      $endgroup$
      – J. M. is away
      Mar 27 at 16:06















    9












    $begingroup$

    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 *)





    share|improve this answer











    $endgroup$












    • $begingroup$
      Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
      $endgroup$
      – mjw
      Mar 27 at 15:34






    • 1




      $begingroup$
      Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
      $endgroup$
      – mjw
      Mar 27 at 15:37






    • 1




      $begingroup$
      @mjw, And[] does short-circuit evaluation.
      $endgroup$
      – J. M. is away
      Mar 27 at 15:41






    • 1




      $begingroup$
      @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
      $endgroup$
      – mjw
      Mar 27 at 16:03






    • 1




      $begingroup$
      @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
      $endgroup$
      – J. M. is away
      Mar 27 at 16:06













    9












    9








    9





    $begingroup$

    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 *)





    share|improve this answer











    $endgroup$



    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 *)






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Mar 27 at 15:53

























    answered Mar 27 at 15:19









    Bob HanlonBob Hanlon

    61.4k33598




    61.4k33598











    • $begingroup$
      Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
      $endgroup$
      – mjw
      Mar 27 at 15:34






    • 1




      $begingroup$
      Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
      $endgroup$
      – mjw
      Mar 27 at 15:37






    • 1




      $begingroup$
      @mjw, And[] does short-circuit evaluation.
      $endgroup$
      – J. M. is away
      Mar 27 at 15:41






    • 1




      $begingroup$
      @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
      $endgroup$
      – mjw
      Mar 27 at 16:03






    • 1




      $begingroup$
      @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
      $endgroup$
      – J. M. is away
      Mar 27 at 16:06
















    • $begingroup$
      Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
      $endgroup$
      – mjw
      Mar 27 at 15:34






    • 1




      $begingroup$
      Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
      $endgroup$
      – mjw
      Mar 27 at 15:37






    • 1




      $begingroup$
      @mjw, And[] does short-circuit evaluation.
      $endgroup$
      – J. M. is away
      Mar 27 at 15:41






    • 1




      $begingroup$
      @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
      $endgroup$
      – mjw
      Mar 27 at 16:03






    • 1




      $begingroup$
      @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
      $endgroup$
      – J. M. is away
      Mar 27 at 16:06















    $begingroup$
    Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
    $endgroup$
    – mjw
    Mar 27 at 15:34




    $begingroup$
    Looks like your method is five times faster than the next best! Can you give some insight into why this is? Thanks!
    $endgroup$
    – mjw
    Mar 27 at 15:34




    1




    1




    $begingroup$
    Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
    $endgroup$
    – mjw
    Mar 27 at 15:37




    $begingroup$
    Also, and I guess this depends on the probability of any entry being negative, it may make sense for the algorithm to stop as soon as it finds a negative (or non-positive) element in the list.
    $endgroup$
    – mjw
    Mar 27 at 15:37




    1




    1




    $begingroup$
    @mjw, And[] does short-circuit evaluation.
    $endgroup$
    – J. M. is away
    Mar 27 at 15:41




    $begingroup$
    @mjw, And[] does short-circuit evaluation.
    $endgroup$
    – J. M. is away
    Mar 27 at 15:41




    1




    1




    $begingroup$
    @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
    $endgroup$
    – mjw
    Mar 27 at 16:03




    $begingroup$
    @Bob, Thank you for your edit. Why, though, does it take longer for your method to work when there is a negative entry? I would have thought that in each case, it would take the same amount of time to go through the whole list.
    $endgroup$
    – mjw
    Mar 27 at 16:03




    1




    1




    $begingroup$
    @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
    $endgroup$
    – J. M. is away
    Mar 27 at 16:06




    $begingroup$
    @Roman, I do not believe that any lazy evaluation is being done. My comment was more to point out that an evaluation like And[True, True, False, True, True, ... True] will finish at once (and similar remarks apply for Or[]). Perhaps one can judiciously use Catch[]/Throw[]if an early-return test for long lists is desired.
    $endgroup$
    – J. M. is away
    Mar 27 at 16:06











    4












    $begingroup$

    Ah, maybe this is too simple, but works for exactly what you're doing:



    data = Table[RandomReal[-1,1],i,1,1000];
    AnyTrue[data,Negative] // Not
    (*False*)

    data2 = Table[RandomReal[], i, 1, 10^2];
    AnyTrue[data2, Negative] // Not
    (*True*)





    share|improve this answer











    $endgroup$












    • $begingroup$
      AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
      $endgroup$
      – Roman
      Mar 27 at 14:55










    • $begingroup$
      @Roman - the poster is using AnyTrue not AllTrue
      $endgroup$
      – Bob Hanlon
      Mar 27 at 15:00






    • 1




      $begingroup$
      Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
      $endgroup$
      – Roman
      Mar 27 at 15:04











    • $begingroup$
      ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
      $endgroup$
      – morbo
      Mar 27 at 15:04















    4












    $begingroup$

    Ah, maybe this is too simple, but works for exactly what you're doing:



    data = Table[RandomReal[-1,1],i,1,1000];
    AnyTrue[data,Negative] // Not
    (*False*)

    data2 = Table[RandomReal[], i, 1, 10^2];
    AnyTrue[data2, Negative] // Not
    (*True*)





    share|improve this answer











    $endgroup$












    • $begingroup$
      AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
      $endgroup$
      – Roman
      Mar 27 at 14:55










    • $begingroup$
      @Roman - the poster is using AnyTrue not AllTrue
      $endgroup$
      – Bob Hanlon
      Mar 27 at 15:00






    • 1




      $begingroup$
      Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
      $endgroup$
      – Roman
      Mar 27 at 15:04











    • $begingroup$
      ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
      $endgroup$
      – morbo
      Mar 27 at 15:04













    4












    4








    4





    $begingroup$

    Ah, maybe this is too simple, but works for exactly what you're doing:



    data = Table[RandomReal[-1,1],i,1,1000];
    AnyTrue[data,Negative] // Not
    (*False*)

    data2 = Table[RandomReal[], i, 1, 10^2];
    AnyTrue[data2, Negative] // Not
    (*True*)





    share|improve this answer











    $endgroup$



    Ah, maybe this is too simple, but works for exactly what you're doing:



    data = Table[RandomReal[-1,1],i,1,1000];
    AnyTrue[data,Negative] // Not
    (*False*)

    data2 = Table[RandomReal[], i, 1, 10^2];
    AnyTrue[data2, Negative] // Not
    (*True*)






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Mar 27 at 15:03

























    answered Mar 27 at 14:29









    morbomorbo

    47428




    47428











    • $begingroup$
      AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
      $endgroup$
      – Roman
      Mar 27 at 14:55










    • $begingroup$
      @Roman - the poster is using AnyTrue not AllTrue
      $endgroup$
      – Bob Hanlon
      Mar 27 at 15:00






    • 1




      $begingroup$
      Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
      $endgroup$
      – Roman
      Mar 27 at 15:04











    • $begingroup$
      ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
      $endgroup$
      – morbo
      Mar 27 at 15:04
















    • $begingroup$
      AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
      $endgroup$
      – Roman
      Mar 27 at 14:55










    • $begingroup$
      @Roman - the poster is using AnyTrue not AllTrue
      $endgroup$
      – Bob Hanlon
      Mar 27 at 15:00






    • 1




      $begingroup$
      Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
      $endgroup$
      – Roman
      Mar 27 at 15:04











    • $begingroup$
      ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
      $endgroup$
      – morbo
      Mar 27 at 15:04















    $begingroup$
    AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
    $endgroup$
    – Roman
    Mar 27 at 14:55




    $begingroup$
    AllTrue[data, Positive] to get the sign right. Or use Not on your solution.
    $endgroup$
    – Roman
    Mar 27 at 14:55












    $begingroup$
    @Roman - the poster is using AnyTrue not AllTrue
    $endgroup$
    – Bob Hanlon
    Mar 27 at 15:00




    $begingroup$
    @Roman - the poster is using AnyTrue not AllTrue
    $endgroup$
    – Bob Hanlon
    Mar 27 at 15:00




    1




    1




    $begingroup$
    Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
    $endgroup$
    – Roman
    Mar 27 at 15:04





    $begingroup$
    Yes @BobHanlon . In order to invert his solution to what the OP wants you have to either Not@AnyTrue[data,Negative] or (simpler) AllTrue[data,Positive] or AllTrue[data,NonNegative].
    $endgroup$
    – Roman
    Mar 27 at 15:04













    $begingroup$
    ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
    $endgroup$
    – morbo
    Mar 27 at 15:04




    $begingroup$
    ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
    $endgroup$
    – morbo
    Mar 27 at 15:04











    3












    $begingroup$

    list = 1, 2, 3, 4, -5, -6, -7;

    list /. x_?Negative -> True, x_?Positive -> False





    share|improve this answer









    $endgroup$

















      3












      $begingroup$

      list = 1, 2, 3, 4, -5, -6, -7;

      list /. x_?Negative -> True, x_?Positive -> False





      share|improve this answer









      $endgroup$















        3












        3








        3





        $begingroup$

        list = 1, 2, 3, 4, -5, -6, -7;

        list /. x_?Negative -> True, x_?Positive -> False





        share|improve this answer









        $endgroup$



        list = 1, 2, 3, 4, -5, -6, -7;

        list /. x_?Negative -> True, x_?Positive -> False






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 27 at 14:31









        AlrubaieAlrubaie

        44011




        44011



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Mathematica Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f194043%2fhow-to-check-is-there-any-negative-term-in-a-large-list%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

            Luettelo Yhdysvaltain laivaston lentotukialuksista Lähteet | Navigointivalikko

            Gary (muusikko) Sisällysluettelo Historia | Rockin' High | Lähteet | Aiheesta muualla | NavigointivalikkoInfobox OKTuomas "Gary" Keskinen Ancaran kitaristiksiProjekti Rockin' High