With such a small matrix performance could be fast enough with a for loop and probably more readible. But one solution avoiding the use of for loops could be as following.
//Find all rows and cols of the ones in A
[row,col] = find(A);
//Get all row positions that are in a new column index
disp( row( find([1,diff(col)]) ));
I think a more readible solution would be something like the following:
//For each column
for col=1:4
//Find only the first occurence
disp(find(A(:,col),1));
end
As mentioned, with such a small matrix readibility should be a higher priority. You could measure performance of both (or other) solutions by profiling.
If you like to read more about some performance enhancing techniques have a look here.