Selecting points on either side of a curve

Clash Royale CLAN TAG#URR8PPP
up vote
5
down vote
favorite
I have the following array of data. Suppose I want only to keep data within the two lines. I can achieve my result using the following code:
data = Table[i, RandomReal[-10, 10], i, 0, 100];
line1[x_] := 0.1 x - 10;
line2[x_] := -0.1 x + 10;

rf = RegionMember[Polygon[0, line1[0], 0, line2[0], 100,line1[100]]];
bool1 = rf[data];
notbool1 = Not[#] & /@ bool1
datain = Pick[data, bool1];
dataout = Pick[data, notbool1];
This has the desired effect.

Now suppose I only have one line, since I can't make a closed region what would be the best way to select points either above or below a line? What if the curve is not a straight line? Any ideas?
list-manipulation data
add a comment |Â
up vote
5
down vote
favorite
I have the following array of data. Suppose I want only to keep data within the two lines. I can achieve my result using the following code:
data = Table[i, RandomReal[-10, 10], i, 0, 100];
line1[x_] := 0.1 x - 10;
line2[x_] := -0.1 x + 10;

rf = RegionMember[Polygon[0, line1[0], 0, line2[0], 100,line1[100]]];
bool1 = rf[data];
notbool1 = Not[#] & /@ bool1
datain = Pick[data, bool1];
dataout = Pick[data, notbool1];
This has the desired effect.

Now suppose I only have one line, since I can't make a closed region what would be the best way to select points either above or below a line? What if the curve is not a straight line? Any ideas?
list-manipulation data
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
2
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]
â Michael E2
Sep 10 at 16:09
add a comment |Â
up vote
5
down vote
favorite
up vote
5
down vote
favorite
I have the following array of data. Suppose I want only to keep data within the two lines. I can achieve my result using the following code:
data = Table[i, RandomReal[-10, 10], i, 0, 100];
line1[x_] := 0.1 x - 10;
line2[x_] := -0.1 x + 10;

rf = RegionMember[Polygon[0, line1[0], 0, line2[0], 100,line1[100]]];
bool1 = rf[data];
notbool1 = Not[#] & /@ bool1
datain = Pick[data, bool1];
dataout = Pick[data, notbool1];
This has the desired effect.

Now suppose I only have one line, since I can't make a closed region what would be the best way to select points either above or below a line? What if the curve is not a straight line? Any ideas?
list-manipulation data
I have the following array of data. Suppose I want only to keep data within the two lines. I can achieve my result using the following code:
data = Table[i, RandomReal[-10, 10], i, 0, 100];
line1[x_] := 0.1 x - 10;
line2[x_] := -0.1 x + 10;

rf = RegionMember[Polygon[0, line1[0], 0, line2[0], 100,line1[100]]];
bool1 = rf[data];
notbool1 = Not[#] & /@ bool1
datain = Pick[data, bool1];
dataout = Pick[data, notbool1];
This has the desired effect.

Now suppose I only have one line, since I can't make a closed region what would be the best way to select points either above or below a line? What if the curve is not a straight line? Any ideas?
list-manipulation data
list-manipulation data
edited Sep 10 at 16:16
Henrik Schumacher
40k255120
40k255120
asked Sep 10 at 15:51
Giovanni Baez
470111
470111
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
2
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]
â Michael E2
Sep 10 at 16:09
add a comment |Â
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
2
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]
â Michael E2
Sep 10 at 16:09
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
2
2
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]â Michael E2
Sep 10 at 16:09
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]â Michael E2
Sep 10 at 16:09
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
5
down vote
accepted
Some knowledge about (planar) analytic geometry facilitates this problem. Suppose now you only have line1, this
Select[data, line1[ #[[1]] ] < #[[2]] &]
selects out the points above line1; the key lies in the inequality. If it is connected by >, then the points below line1 you will get.
add a comment |Â
up vote
3
down vote
in, out = GeneralUtilities`SelectDiscard[data, line1[#[[1]]]<=#[[2]]<=line2[#[[1]]]&];
Show[ListPlot[in, out, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]]

above1, below1 = GeneralUtilities`SelectDiscard[data, line1[#[[1]]] <= #[[2]] &];
above2, below2 = GeneralUtilities`SelectDiscard[data, line2[#[[1]]] <= #[[2]] &];
plt1, plt2 = Show[ListPlot[#, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]] & /@
above1,below1, above2, below2 ;
Row[plt1, plt2, Spacer[5]]

ÃÂ ÃÂ
ÃÂ ÃÂ
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
accepted
Some knowledge about (planar) analytic geometry facilitates this problem. Suppose now you only have line1, this
Select[data, line1[ #[[1]] ] < #[[2]] &]
selects out the points above line1; the key lies in the inequality. If it is connected by >, then the points below line1 you will get.
add a comment |Â
up vote
5
down vote
accepted
Some knowledge about (planar) analytic geometry facilitates this problem. Suppose now you only have line1, this
Select[data, line1[ #[[1]] ] < #[[2]] &]
selects out the points above line1; the key lies in the inequality. If it is connected by >, then the points below line1 you will get.
add a comment |Â
up vote
5
down vote
accepted
up vote
5
down vote
accepted
Some knowledge about (planar) analytic geometry facilitates this problem. Suppose now you only have line1, this
Select[data, line1[ #[[1]] ] < #[[2]] &]
selects out the points above line1; the key lies in the inequality. If it is connected by >, then the points below line1 you will get.
Some knowledge about (planar) analytic geometry facilitates this problem. Suppose now you only have line1, this
Select[data, line1[ #[[1]] ] < #[[2]] &]
selects out the points above line1; the key lies in the inequality. If it is connected by >, then the points below line1 you will get.
edited Sep 10 at 16:11
answered Sep 10 at 16:01
ÃÂûÃÂþñýôÃÂÿàÃÂõóó
2,264725
2,264725
add a comment |Â
add a comment |Â
up vote
3
down vote
in, out = GeneralUtilities`SelectDiscard[data, line1[#[[1]]]<=#[[2]]<=line2[#[[1]]]&];
Show[ListPlot[in, out, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]]

above1, below1 = GeneralUtilities`SelectDiscard[data, line1[#[[1]]] <= #[[2]] &];
above2, below2 = GeneralUtilities`SelectDiscard[data, line2[#[[1]]] <= #[[2]] &];
plt1, plt2 = Show[ListPlot[#, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]] & /@
above1,below1, above2, below2 ;
Row[plt1, plt2, Spacer[5]]

ÃÂ ÃÂ
ÃÂ ÃÂ
add a comment |Â
up vote
3
down vote
in, out = GeneralUtilities`SelectDiscard[data, line1[#[[1]]]<=#[[2]]<=line2[#[[1]]]&];
Show[ListPlot[in, out, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]]

above1, below1 = GeneralUtilities`SelectDiscard[data, line1[#[[1]]] <= #[[2]] &];
above2, below2 = GeneralUtilities`SelectDiscard[data, line2[#[[1]]] <= #[[2]] &];
plt1, plt2 = Show[ListPlot[#, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]] & /@
above1,below1, above2, below2 ;
Row[plt1, plt2, Spacer[5]]

ÃÂ ÃÂ
ÃÂ ÃÂ
add a comment |Â
up vote
3
down vote
up vote
3
down vote
in, out = GeneralUtilities`SelectDiscard[data, line1[#[[1]]]<=#[[2]]<=line2[#[[1]]]&];
Show[ListPlot[in, out, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]]

above1, below1 = GeneralUtilities`SelectDiscard[data, line1[#[[1]]] <= #[[2]] &];
above2, below2 = GeneralUtilities`SelectDiscard[data, line2[#[[1]]] <= #[[2]] &];
plt1, plt2 = Show[ListPlot[#, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]] & /@
above1,below1, above2, below2 ;
Row[plt1, plt2, Spacer[5]]

ÃÂ ÃÂ
ÃÂ ÃÂ
in, out = GeneralUtilities`SelectDiscard[data, line1[#[[1]]]<=#[[2]]<=line2[#[[1]]]&];
Show[ListPlot[in, out, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]]

above1, below1 = GeneralUtilities`SelectDiscard[data, line1[#[[1]]] <= #[[2]] &];
above2, below2 = GeneralUtilities`SelectDiscard[data, line2[#[[1]]] <= #[[2]] &];
plt1, plt2 = Show[ListPlot[#, PlotStyle -> Green, Red],
Plot[line1@x, line2@x, x, 0, 100,
Filling -> 1 -> 2, Opacity[.5, LightBlue], None]] & /@
above1,below1, above2, below2 ;
Row[plt1, plt2, Spacer[5]]

ÃÂ ÃÂ
ÃÂ ÃÂ
edited Sep 11 at 3:23
answered Sep 10 at 21:10
kglr
162k8187386
162k8187386
add a comment |Â
add a comment |Â
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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f181620%2fselecting-points-on-either-side-of-a-curve%23new-answer', 'question_page');
);
Post as a guest
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
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
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
Related: mathematica.stackexchange.com/questions/97299/â¦
â Michael E2
Sep 10 at 16:04
2
Pick[data, RegionMember[HalfPlane[line1[0], line1[1], 0, -1], data]]â Michael E2
Sep 10 at 16:09