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
Different result between scanning in Epson's "color negative film" mode and scanning in positive -> invert curve in post?
Pre-amplifier input protection
Why didn't Theresa May consult with Parliament before negotiating a deal with the EU?
Why are there no referendums in the US?
A Rare Riley Riddle
Class Action - which options I have?
Integer addition + constant, is it a group?
How do I find the solutions of the following equation?
How easy is it to start Magic from scratch?
How do we know the LHC results are robust?
Go Pregnant or Go Home
Tiptoe or tiphoof? Adjusting words to better fit fantasy races
What is the difference between "behavior" and "behaviour"?
Is the destination of a commercial flight important for the pilot?
Where does the Z80 processor start executing from?
Is expanding the research of a group into machine learning as a PhD student risky?
Would a high gravity rocky planet be guaranteed to have an atmosphere?
How does buying out courses with grant money work?
How to Reset Passwords on Multiple Websites Easily?
How do scammers retract money, while you can’t?
Escape a backup date in a file name
What is the best translation for "slot" in the context of multiplayer video games?
What happens if you roll doubles 3 times then land on "Go to jail?"
What is paid subscription needed for in Mortal Kombat 11?
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
New contributor
$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
New contributor
$endgroup$
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is slightly pensive♦
15 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$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
14 hours ago
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
New contributor
$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
New contributor
New contributor
edited 10 hours ago
mjw
1,05110
1,05110
New contributor
asked 15 hours ago
a ba b
361
361
New contributor
New contributor
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is slightly pensive♦
15 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$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
14 hours ago
add a comment |
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is slightly pensive♦
15 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$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
14 hours ago
3
3
$begingroup$
VectorQ[list, Positive]
?$endgroup$
– J. M. is slightly pensive♦
15 hours ago
$begingroup$
VectorQ[list, Positive]
?$endgroup$
– J. M. is slightly pensive♦
15 hours ago
1
1
$begingroup$
Use
Apply
as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$begingroup$
Use
Apply
as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$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
14 hours ago
$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
14 hours ago
add a comment |
4 Answers
4
active
oldest
votes
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$endgroup$
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
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
14 hours ago
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
14 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
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 slightly pensive♦
13 hours ago
|
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
15 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
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.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
);
);
a b is a new contributor. Be nice, and check out our Code of Conduct.
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$
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
Alternate solution:
list = RandomReal[1, 10^6];
Min[list] >= 0
$endgroup$
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
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 13 hours ago
sakrasakra
2,6781429
2,6781429
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
add a comment |
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
2
2
$begingroup$
...i.e.
NonNegative[Min[list]]
.$endgroup$
– J. M. is slightly pensive♦
13 hours ago
$begingroup$
...i.e.
NonNegative[Min[list]]
.$endgroup$
– J. M. is slightly pensive♦
13 hours ago
2
2
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
11 hours ago
1
1
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
9 hours ago
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
14 hours ago
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
14 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
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 slightly pensive♦
13 hours ago
|
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
14 hours ago
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
14 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
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 slightly pensive♦
13 hours ago
|
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 14 hours ago
answered 14 hours ago
Bob HanlonBob Hanlon
61.1k33598
61.1k33598
$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
14 hours ago
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
14 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
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 slightly pensive♦
13 hours ago
|
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
14 hours ago
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
14 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
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 slightly pensive♦
13 hours ago
$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
14 hours ago
$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
14 hours ago
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
14 hours ago
$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
14 hours ago
1
1
$begingroup$
@mjw,
And[]
does short-circuit evaluation.$endgroup$
– J. M. is slightly pensive♦
14 hours ago
$begingroup$
@mjw,
And[]
does short-circuit evaluation.$endgroup$
– J. M. is slightly pensive♦
14 hours ago
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
13 hours ago
$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
13 hours ago
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 slightly pensive♦
13 hours ago
$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 slightly pensive♦
13 hours ago
|
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
15 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
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
15 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
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 14 hours ago
answered 15 hours ago
morbomorbo
46418
46418
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
15 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
add a comment |
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
15 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or use Not
on your solution.$endgroup$
– Roman
15 hours ago
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or use Not
on your solution.$endgroup$
– Roman
15 hours ago
$begingroup$
@Roman - the poster is using
AnyTrue
not AllTrue
$endgroup$
– Bob Hanlon
14 hours ago
$begingroup$
@Roman - the poster is using
AnyTrue
not AllTrue
$endgroup$
– Bob Hanlon
14 hours ago
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
14 hours ago
$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
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
14 hours ago
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 15 hours ago
AlrubaieAlrubaie
31910
31910
add a comment |
add a comment |
a b is a new contributor. Be nice, and check out our Code of Conduct.
a b is a new contributor. Be nice, and check out our Code of Conduct.
a b is a new contributor. Be nice, and check out our Code of Conduct.
a b is a new contributor. Be nice, and check out our Code of Conduct.
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 slightly pensive♦
15 hours ago
1
$begingroup$
Use
Apply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
15 hours ago
$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
14 hours ago