MATLAB: How to replace certain rows in a matrix with the same row vector

indexinglogcallogical?MATLABmatrix

I have a 100 x 3 matrix that I first fill with a repeating row vector:
colours = repmat([1, 0, 0], 100, 1)
I then want to replace selected, non-contiguous rows of the matrix with a different row vector. Which rows should be replaced is determined by a 100 x 1 logical. The following code gives a dimension mismatch (I understand why):
colours(logical(data(:, 18)), :) = [0 1 0];
Is there a way to achieve this without a loop?

Best Answer

Here is one easy way:
new = [0,1,0];
idx = logical(data(:,18));
colours(idx,1) = new(1);
colours(idx,2) = new(2);
colours(idx,3) = new(3);
Although this is not a general solution for an arbitrary number of columns, because the color data will only ever have three columns it is quite acceptable to explicitly allocate to each column.