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 set the font color of quantity objects (Version 11.3 vs version 12)?
What is a Recurrent Neural Network?
Why is current rating for multicore cable lower than single core with the same cross section?
Toggle Overlays shortcut?
Why do computer-science majors learn calculus?
Is creating your own "experiment" considered cheating during a physics exam?
Why are the 2nd/3rd singular forms of present of « potere » irregular?
How can Republicans who favour free markets, consistently express anger when they don't like the outcome of that choice?
Was there a Viking Exchange as well as a Columbian one?
If Earth is tilted, why is Polaris always above the same spot?
Will tsunami waves travel forever if there was no land?
Pressure to defend the relevance of one's area of mathematics
Where did the extra Pym particles come from in Endgame?
Why the difference in metal between 銀行 and お金?
Is GOCE a satellite or aircraft?
How does a Swashbuckler rogue "fight with two weapons while safely darting away"?
What are the spoon bit of a spoon and fork bit of a fork called?
Reverse the word in a string with the same order in javascript
Subtleties of choosing the sequence of tenses in Russian
Can I get candy for a Pokemon I haven't caught yet?
Python "triplet" dictionary?
When India mathematicians did know Euclid's Elements?
Packing rectangles: Does rotation ever help?
Can someone publish a story that happened to you?
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
$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.
list-manipulation expression-test
$endgroup$
add a comment |
$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.
list-manipulation expression-test
$endgroup$
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is away♦
Mar 27 at 14:26
1
$begingroup$
UseApply
as inAnd @@ 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 (usePositive
), or do you need all terms to be zero or positive (useNonNegative
)?
$endgroup$
– Roman
Mar 27 at 15:01
add a comment |
$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.
list-manipulation expression-test
$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
list-manipulation expression-test
edited Mar 27 at 19:01
mjw
1,33910
1,33910
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$
UseApply
as inAnd @@ 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 (usePositive
), or do you need all terms to be zero or positive (useNonNegative
)?
$endgroup$
– Roman
Mar 27 at 15:01
add a comment |
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is away♦
Mar 27 at 14:26
1
$begingroup$
UseApply
as inAnd @@ 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 (usePositive
), or do you need all terms to be zero or positive (useNonNegative
)?
$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
add a comment |
4 Answers
4
active
oldest
votes
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$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
add a comment |
$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 *)
$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 likeAnd[True, True, False, True, True, ... True]
will finish at once (and similar remarks apply forOr[]
). Perhaps one can judiciously useCatch[]/Throw[]
if an early-return test for long lists is desired.
$endgroup$
– J. M. is away♦
Mar 27 at 16:06
|
show 3 more comments
$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*)
$endgroup$
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
Mar 27 at 14:55
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$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 eitherNot@AnyTrue[data,Negative]
or (simpler)AllTrue[data,Positive]
orAllTrue[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
add a comment |
$begingroup$
list = 1, 2, 3, 4, -5, -6, -7;
list /. x_?Negative -> True, x_?Positive -> False
$endgroup$
add a comment |
Your Answer
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$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
add a comment |
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$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
add a comment |
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$endgroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
answered Mar 27 at 16:06
sakrasakra
2,8881429
2,8881429
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
add a comment |
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
add a comment |
$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 *)
$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 likeAnd[True, True, False, True, True, ... True]
will finish at once (and similar remarks apply forOr[]
). Perhaps one can judiciously useCatch[]/Throw[]
if an early-return test for long lists is desired.
$endgroup$
– J. M. is away♦
Mar 27 at 16:06
|
show 3 more comments
$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 *)
$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 likeAnd[True, True, False, True, True, ... True]
will finish at once (and similar remarks apply forOr[]
). Perhaps one can judiciously useCatch[]/Throw[]
if an early-return test for long lists is desired.
$endgroup$
– J. M. is away♦
Mar 27 at 16:06
|
show 3 more comments
$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 *)
$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 *)
edited Mar 27 at 15:53
answered Mar 27 at 15:19
Bob HanlonBob Hanlon
62k33598
62k33598
$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 likeAnd[True, True, False, True, True, ... True]
will finish at once (and similar remarks apply forOr[]
). Perhaps one can judiciously useCatch[]/Throw[]
if an early-return test for long lists is desired.
$endgroup$
– J. M. is away♦
Mar 27 at 16:06
|
show 3 more comments
$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 likeAnd[True, True, False, True, True, ... True]
will finish at once (and similar remarks apply forOr[]
). Perhaps one can judiciously useCatch[]/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
|
show 3 more comments
$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*)
$endgroup$
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
Mar 27 at 14:55
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$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 eitherNot@AnyTrue[data,Negative]
or (simpler)AllTrue[data,Positive]
orAllTrue[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
add a comment |
$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*)
$endgroup$
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
Mar 27 at 14:55
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$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 eitherNot@AnyTrue[data,Negative]
or (simpler)AllTrue[data,Positive]
orAllTrue[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
add a comment |
$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*)
$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*)
edited Mar 27 at 15:03
answered Mar 27 at 14:29
morbomorbo
48428
48428
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
Mar 27 at 14:55
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$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 eitherNot@AnyTrue[data,Negative]
or (simpler)AllTrue[data,Positive]
orAllTrue[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
add a comment |
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
Mar 27 at 14:55
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$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 eitherNot@AnyTrue[data,Negative]
or (simpler)AllTrue[data,Positive]
orAllTrue[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
add a comment |
$begingroup$
list = 1, 2, 3, 4, -5, -6, -7;
list /. x_?Negative -> True, x_?Positive -> False
$endgroup$
add a comment |
$begingroup$
list = 1, 2, 3, 4, -5, -6, -7;
list /. x_?Negative -> True, x_?Positive -> False
$endgroup$
add a comment |
$begingroup$
list = 1, 2, 3, 4, -5, -6, -7;
list /. x_?Negative -> True, x_?Positive -> False
$endgroup$
list = 1, 2, 3, 4, -5, -6, -7;
list /. x_?Negative -> True, x_?Positive -> False
answered Mar 27 at 14:31
AlrubaieAlrubaie
692111
692111
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
3
$begingroup$
VectorQ[list, Positive]
?$endgroup$
– J. M. is away♦
Mar 27 at 14:26
1
$begingroup$
Use
Apply
as inAnd @@ 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 (useNonNegative
)?$endgroup$
– Roman
Mar 27 at 15:01