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
