MATLAB Answers

vectorized non-linear matrix assignment

2 views (last 30 days)
cmo
cmo on 18 May 2015
Commented: John D'Errico on 18 May 2015
Let A be an m x n matrix (both m,n > 1).
let "X" p-by-1 be a set of row indices of A, and "Y" p-by-1 be a set of column indices of "A".
Suppose I want to assign the values of vector "V" p-by-1 to coordinates "(X,Y)" of "A".
Is there a way to vectorize this assignment?
e.g.
A = zeros(10,10);
X = [1 4 5 9];
Y = [ 2 2 1 8];
V = [1.1 2.98 -3 14];
i.e.
I want to assign A(1,2) = 1.1 and A(4,2) = 2.98 and A(5,1) = -3 and A(9,8) = 14.
something like "A(X,Y) = V", but that doesnt work.

  0 Comments

Sign in to comment.

Answers (1)

Star Strider
Star Strider on 18 May 2015
Using the sub2ind function is the easiest way:
LI = sub2ind(size(A), X', Y');
A(LI) = V

  1 Comment

John D'Errico
John D'Errico on 18 May 2015
+1. While this is of course the correct answer, it has always bothered me that there is not a more direct solution. Use of sub2ind is just too un-obvious to the new user.

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!