Replacing multiple columns elegantly with a vector

10 次查看(过去 30 天)
I am looking for an elegant and simple way to replace a some columns in a matrix (specified by a logical array) with a given column vector, e.g:
M = magic(5);
replace_column = boolean([1 0 0 1 0]); %replace the 1st and 4th column
replace_with = [5;5;5;5;5]; %column vector that the targeted columns should be replaced with
I now want to replace the columns corresponding to the entries of replace_column equal to 1 with the vector specified in replace_with.
I do not want to use a for-loop here, because I think there is a simple solution to this. However, using
M(:,replace_column) = replace_with;
results in an error:
Unable to perform assignment because the size of the left side is 5-by-2 and the size of the right side is 5-by-1.
Do you have an idea how to solve this?

采纳的回答

Fangjun Jiang
Fangjun Jiang 2021-2-1
编辑:Fangjun Jiang 2021-2-1
You want to replace two columns but only provided one column of data. Provide the matching data.
M(:,replace_column) =repmat(5,5,2)

更多回答(0 个)

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by