Add element to the matrix in one sentence

2 Ansichten (letzte 30 Tage)
Xin
Xin am 14 Jun. 2017
Bearbeitet: Andrei Bobrov am 14 Jun. 2017
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 Kommentare
Adam
Adam am 14 Jun. 2017
You can vectorize multi-line statements too.
Xin
Xin am 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 14 Jun. 2017
Bearbeitet: Andrei Bobrov am 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 Kommentare
Andrei Bobrov
Andrei Bobrov am 14 Jun. 2017
This is not possible for a double array if only for cell array.
Andrei Bobrov
Andrei Bobrov am 14 Jun. 2017
Bearbeitet: Andrei Bobrov am 14 Jun. 2017
ii = [5,3,2,5,3,100,5];
var = 1:7;
A = reshape(accumarray(ii(:),var(:),[100 1],@(x){x(:)'}),10,[]);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Guillaume
Guillaume am 14 Jun. 2017
Bearbeitet: Guillaume am 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;

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!