In your example, you are indexing into a 2D x matrix x( ) with the values of the column x(:,3) that are > 0. You probably mean to do something more like this:
x(x(:,1),1) = .75;
x(x(:,2),2) = .66;
That being said, if the matrix is binary (i.e. 0s and 1s), then I would try to take advantage of logical indexing. The idea is that your matrix is already logical, and the things that you want to replace can be added in using that.
The difficulty lies in teasing out what shape your values need to be in that you want to put into the matrix. Because you are working column by column, it isn't the worst thing to come up with. I've included a small demo below that you should be able to try out and modify to work for you. Of note, if you haven't worked with logical matrices/vectors before: You can use the "not" operator to switch 1s into 0s and 0s into 1s.
N = 10;
M = rand(N) > .5
vals1 = rand(1,N)
vals1 = repmat(vals1,N,1)
vals0 = -rand(1,N)
vals0 = repmat(vals0,N,1)
res = zeros(size(M));
res(logical(M)) = vals1(logical(M));
res(~logical(M)) = vals0(~logical(M));
The calls to 'logical()' just makes sure that the 'M' matrix is logical, even if it wasn't to begin with. I think that this would be much more flexible than going column by column. The downside is the allocation of the extra (possibly big) matrices 'vals1' and 'vals0'.