Filter löschen
Filter löschen

error " Assignment has fewer non singleton rhs dimensions than non singleton subscripts"

1 Ansicht (letzte 30 Tage)
Hello, I have 2 arrays that represent indexes of a matrix, for example idx =[ 1 5 ] and idy = [ 2 3] . When I execute this line
M(idx,idy)=1; % M is a matrix
all the components M(1,2) M(1,3) M(5,2) and M(5,3) are affected . What can I do so that only M(1,2) and M(5,3) become equal to 1 ? ( without any loop)
N.B : I used sub2ind (size(M),idx,idy) but it's slow in my case ( not this example) because the matrix M is bigger.
Thank you in advance

Akzeptierte Antwort

Stephen23
Stephen23 am 1 Jun. 2017
Bearbeitet: Stephen23 am 1 Jun. 2017
Use sub2ind:
M(sub2ind(size(M),idx,idy)) = 1
@Elkhanssaa Marsali: you just edited your question to add this line "I used sub2ind (size(M),idx,idy) but it's slow in my case"
Well, using sub2ind is one solution, otherwise you could use a loop. It does not matter if you want a faster solution, those are the solutions for your problem. Well, I guess this is one answer that will never get accepted :)
  2 Kommentare
John D'Errico
John D'Errico am 1 Jun. 2017
sub2ind is the correct solution for the problem as posed.
I see it was added that sub2ind was too slow. That suggests that the OP is either using a sparse matrix and trying to add elements (which will be SLOW, DON'T do it that way!) or they are growing the matrix over time, adding elements outside the current range of indexes. DON'T do that either!
So don't grow matrices. (There are tricks to avoid this.) Don't stuff elements into a sparse matrix. (Instead, learn to use sparse matrix tools.)
The question of why sub2ind was too slow depends on what they are doing.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

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

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by