I have been struggling to find a GAUSS function that is equivalent to the "find" function in MATLAB. Ideally I would like to have such function to return an index of all elements in a matrix that match certain criterion instead of doing a loop to locate these elements. Could anyone help? Thanks!
1 Answer
0
I think this will accomplish what you are trying to do:
//example data x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; //convert 'x' to a vector, by //stacking the columns x = vec(x); //set zeros equal to one and non-zeros equal to zero x_mask = (x .== 0); //get the indices of the elements that are now zero idx = indexcat(x_mask, 0);
After the code above, idx will equal:
2 3 4 5 8 9
You can make it much more concise like this:
x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; idx = indexcat((vec(x) .== 0), 0);
or if you wanted to make your own procedure, you could do this:
x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; idx = find(x); proc (1) = find(x); retp(indexcat((vec(x) .== 0), 0)); endp;
Your Answer
1 Answer
I think this will accomplish what you are trying to do:
//example data x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; //convert 'x' to a vector, by //stacking the columns x = vec(x); //set zeros equal to one and non-zeros equal to zero x_mask = (x .== 0); //get the indices of the elements that are now zero idx = indexcat(x_mask, 0);
After the code above, idx will equal:
2 3 4 5 8 9
You can make it much more concise like this:
x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; idx = indexcat((vec(x) .== 0), 0);
or if you wanted to make your own procedure, you could do this:
x = { 0 1 3, 1 0 0, 1 0 0, 2 2 0 }; idx = find(x); proc (1) = find(x); retp(indexcat((vec(x) .== 0), 0)); endp;