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
Proof of work - lottery approach
Why, precisely, is argon used in neutrino experiments?
How did Doctor Strange see the winning outcome in Avengers: Infinity War?
Is expanding the research of a group into machine learning as a PhD student risky?
Roman Numeral Treatment of Suspensions
What is the difference between "behavior" and "behaviour"?
How to write papers efficiently when English isn't my first language?
Tiptoe or tiphoof? Adjusting words to better fit fantasy races
Do the temporary hit points from the Battlerager barbarian's Reckless Abandon stack if I make multiple attacks on my turn?
Purchasing a ticket for someone else in another country?
What is the intuitive meaning of having a linear relationship between the logs of two variables?
How to check is there any negative term in a large list?
Sort a list by elements of another list
How does it work when somebody invests in my business?
Gears on left are inverse to gears on right?
Method to test if a number is a perfect power?
How does buying out courses with grant money work?
Is the destination of a commercial flight important for the pilot?
Is HostGator storing my password in plaintext?
How do I find the solutions of the following equation?
How long to clear the 'suck zone' of a turbofan after start is initiated?
Pre-amplifier input protection
I'm in charge of equipment buying but no one's ever happy with what I choose. How to fix this?
How to run a prison with the smallest amount of guards?
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♦
11 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
11 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
11 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 7 hours ago
mjw
1,04110
1,04110
New contributor
asked 12 hours ago
a ba b
361
361
New contributor
New contributor
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is slightly pensive♦
11 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
11 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
11 hours ago
add a comment |
3
$begingroup$
VectorQ[list, Positive]
?
$endgroup$
– J. M. is slightly pensive♦
11 hours ago
1
$begingroup$
UseApply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
11 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
11 hours ago
3
3
$begingroup$
VectorQ[list, Positive]
?$endgroup$
– J. M. is slightly pensive♦
11 hours ago
$begingroup$
VectorQ[list, Positive]
?$endgroup$
– J. M. is slightly pensive♦
11 hours ago
1
1
$begingroup$
Use
Apply
as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
11 hours ago
$begingroup$
Use
Apply
as in And @@ Positive[list]
$endgroup$
– Bob Hanlon
11 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
11 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
11 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♦
9 hours ago
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 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
10 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
10 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
10 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
10 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♦
9 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
11 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
11 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 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♦
9 hours ago
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 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♦
9 hours ago
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 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 9 hours ago
sakrasakra
2,6581428
2,6581428
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
9 hours ago
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 hours ago
add a comment |
2
$begingroup$
...i.e.NonNegative[Min[list]]
.
$endgroup$
– J. M. is slightly pensive♦
9 hours ago
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 hours ago
2
2
$begingroup$
...i.e.
NonNegative[Min[list]]
.$endgroup$
– J. M. is slightly pensive♦
9 hours ago
$begingroup$
...i.e.
NonNegative[Min[list]]
.$endgroup$
– J. M. is slightly pensive♦
9 hours ago
1
1
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
Very good solution! This avoids lists of Booleans and hence allows for vectorization. (Boolean arrays cannot be packed.)
$endgroup$
– Henrik Schumacher
8 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 hours ago
$begingroup$
This is about 100 times faster than any of the other solutions. Impressive!
$endgroup$
– Roman
5 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
10 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
10 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
10 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
10 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♦
9 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
10 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
10 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
10 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
10 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♦
9 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 10 hours ago
answered 10 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
10 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
10 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
10 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
10 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♦
9 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
10 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
10 hours ago
1
$begingroup$
@mjw,And[]
does short-circuit evaluation.
$endgroup$
– J. M. is slightly pensive♦
10 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
10 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♦
9 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
10 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
10 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
10 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
10 hours ago
1
1
$begingroup$
@mjw,
And[]
does short-circuit evaluation.$endgroup$
– J. M. is slightly pensive♦
10 hours ago
$begingroup$
@mjw,
And[]
does short-circuit evaluation.$endgroup$
– J. M. is slightly pensive♦
10 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
10 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
10 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♦
9 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♦
9 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
11 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
11 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 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
11 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
11 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 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 10 hours ago
answered 11 hours ago
morbomorbo
46418
46418
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
11 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
11 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 hours ago
add a comment |
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or useNot
on your solution.
$endgroup$
– Roman
11 hours ago
$begingroup$
@Roman - the poster is usingAnyTrue
notAllTrue
$endgroup$
– Bob Hanlon
11 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 hours ago
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or use Not
on your solution.$endgroup$
– Roman
11 hours ago
$begingroup$
AllTrue[data, Positive]
to get the sign right. Or use Not
on your solution.$endgroup$
– Roman
11 hours ago
$begingroup$
@Roman - the poster is using
AnyTrue
not AllTrue
$endgroup$
– Bob Hanlon
11 hours ago
$begingroup$
@Roman - the poster is using
AnyTrue
not AllTrue
$endgroup$
– Bob Hanlon
11 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
10 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
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 hours ago
$begingroup$
ah, signs are reversed, missed that part. I updated the code to reflect questioners exact question.
$endgroup$
– morbo
10 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 11 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♦
11 hours ago
1
$begingroup$
Use
Apply
as inAnd @@ Positive[list]
$endgroup$
– Bob Hanlon
11 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
11 hours ago