MATLAB Answers

Replacing several values in multidimensional array simultaneously

3 views (last 30 days)
David Hoffmeyer
David Hoffmeyer on 14 Sep 2020
Edited: Bruno Luong on 14 Sep 2020
I have a multidimensional array, e.g.
A(:,:,1) = [1 2 3 ; 4 5 6];
A(:,:,2) = [7 8 9 ; 10 11 12];
I want to replace several of the values in this array with the same value simultaneously. Specifically I want to do this column-wise, the result should be e.g.
A(:,2,1) = [-1 ; -2];
A(:,3,2) = [-1 ; -2];
yielding
A(:,:,1) = [1 -1 3 ; 4 5 -1];
A(:,:,2) = [7 -2 9 ; 10 11 -2];
I attempted this by
B = [2 3]; C = [1 2];
A(:,B,C) = [-1 ; -2];
but it does not give the wanted result.
Any idea on how to do this without performing a for-loop?

  0 Comments

Sign in to comment.

Accepted Answer

Bruno Luong
Bruno Luong on 14 Sep 2020
Edited: Bruno Luong on 14 Sep 2020
A(:,:,1) = [1 2 3 ; 4 5 6];
A(:,:,2) = [7 8 9 ; 10 11 12];
s = size(A);
A(:, sub2ind(s(2:3),[2 3],[1 2])) = 0 % = [0 0; 0 0]

  2 Comments

David Hoffmeyer
David Hoffmeyer on 14 Sep 2020
Thanks for your input. However, I have not been precise enough in my question. I need to replace a number of columns in the array with a column containing non-identical values (see the edited question), and not just 0. In that case your proposal does not work. Can you alter it correspondingly?
Bruno Luong
Bruno Luong on 14 Sep 2020
Just replace the RHS as I hint in my answer with "% = [0 0; 0 0]"
A(:, sub2ind(s(2:3),[2 3],[1 2])) = [[-1;-2], [-1;-2]]

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by