MATLAB: Simple but elusive array question

array

Hi,
I have what must be quite a straightforward question, but I can't find a good solution.
I have a large number of arrays, of dimension 500×40. Each column of the arrays consists of a number of (non-repeating) integers between 1 and 40, with the remaining elements being zeros. An example of this on a smaller array would look like this:
1 1 3
2 0 4
3 0 0
0 0 0
What I want to do, is use this to create an array of the same dimensions, which consists of zeros and ones, such that for each column, the entries in that column are the indices of the "ones", and the remaining elements are zero. So, for the example above, I would get:
1 1 0
1 0 0
1 0 1
0 0 1
The catch is, I was trying to think of a nice way of doing it without using for loops, because I have a large number of arrays and want things to run quickly.
I'm sure there must be a very simple solution to this, but I can't think of it!
Any thoughts? Thanks, Will

Best Answer

[r,c,v] = find(a);
out = accumarray([v,c],1,size(a));