Add element to the matrix in one sentence

1 vue (au cours des 30 derniers jours)
Xin
Xin le 14 Juin 2017
Modifié(e) : Andrei Bobrov le 14 Juin 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 commentaires
Adam
Adam le 14 Juin 2017
You can vectorize multi-line statements too.
Xin
Xin le 14 Juin 2017
Could you please be more specific. That's what I have been doing but for this problem it is not very straightforward.

Connectez-vous pour commenter.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

Guillaume
Guillaume le 14 Juin 2017
Modifié(e) : Guillaume le 14 Juin 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;

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!