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;