Clear Filters
Clear Filters

Add element to the matrix in one sentence

1 view (last 30 days)
I have a 2D matrix, say A=zeros(10,10). I want to add a vector of number to the matrix. I have the index of the elements, but it is repeated. E.g. the index [5,3,2,5,3,100,5] and the value is some random [1,2,3,4,5,6,7]. I then want to add 1 into 5th element of A, 2 into 3rd element and so on. How do I do this in one line?
  4 Comments
Adam
Adam on 14 Jun 2017
You can vectorize multi-line statements too.
Xin
Xin on 14 Jun 2017
Could you please be more specific. That's what I have been doing but for this problem it is not very straightforward.

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 14 Jun 2017
Edited: Andrei Bobrov on 14 Jun 2017
A=zeros(10,10);
ii = [5,3,2,5,3,100,5];
var = 1:7;
[ii,ib] = unique(ii);
A(ii) = var(ib);
or
A([5,3,2,5,3,100,5]) = 1:7
  3 Comments
Andrei Bobrov
Andrei Bobrov on 14 Jun 2017
This is not possible for a double array if only for cell array.
Andrei Bobrov
Andrei Bobrov on 14 Jun 2017
Edited: Andrei Bobrov on 14 Jun 2017
ii = [5,3,2,5,3,100,5];
var = 1:7;
A = reshape(accumarray(ii(:),var(:),[100 1],@(x){x(:)'}),10,[]);

Sign in to comment.

More Answers (1)

Guillaume
Guillaume on 14 Jun 2017
Edited: Guillaume on 14 Jun 2017
If I understood correctly
A = zeros(10,10);
indices = [5,3,2,5,3,100,5];
values = [1,2,3,4,5,6,7];
A = A + reshape(accumarray(indices(:), values(:), [numel(A), 1]), size(A))
would be one way to do it. Alternatively,
[uindices, ~, loc] = unique(indices);
sumvalues = accumarray(loc(:), values(:));
A(uindices) = A(uindices) + sumvalues;

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!