Say that I have a matrix or vector of elements with random numbers between 0 and 100. And I want to identify the elements bigger than 75.6. Is there a way to do this different than a loop?
1 Answer
0
Depending upon your goals, you can use either an element-by-element logical comparison or the function indexcat
.
Logical comparison operator
//Create a 7x1 vector
x = { 12,
91,
67,
24,
68,
82,
44 };
cutoff = 75.6;
//Create a 7x1 vector with a
//one for any element > 75.6
//and a zero otherwise
mask = x .> cutoff;
After this code snippet, mask
will equal
0 1 0 0 0 1 0
You can use the selif
function with this mask
variable to get a new vector which only contains the elements which are greater than your cutoff. Continuing with our example above
x2 = selif(x, mask);
will create a new vector, x2
, equal to
91 82
indexcat
function
indexcat
returns the row indices of a vector which are in a specified range. For example, using our x
from above
//Find indices of rows in 'x' with elements greater than 75.6
//and less than positive infinity
idx = indexcat(x, 75.6 | __INFP);
which will set idx
equal to
2 6
Your Answer
1 Answer
Depending upon your goals, you can use either an element-by-element logical comparison or the function indexcat
.
Logical comparison operator
//Create a 7x1 vector
x = { 12,
91,
67,
24,
68,
82,
44 };
cutoff = 75.6;
//Create a 7x1 vector with a
//one for any element > 75.6
//and a zero otherwise
mask = x .> cutoff;
After this code snippet, mask
will equal
0 1 0 0 0 1 0
You can use the selif
function with this mask
variable to get a new vector which only contains the elements which are greater than your cutoff. Continuing with our example above
x2 = selif(x, mask);
will create a new vector, x2
, equal to
91 82
indexcat
function
indexcat
returns the row indices of a vector which are in a specified range. For example, using our x
from above
//Find indices of rows in 'x' with elements greater than 75.6
//and less than positive infinity
idx = indexcat(x, 75.6 | __INFP);
which will set idx
equal to
2 6