Help with matrix indexing.
Afficher commentaires plus anciens
C is a matrix with i rows and 5 columns. i=1:16
I am interested in finding the value of C(i-1,:).
Using the following matlab code, I try to direct matrix c row i-1 any column to c row 16 any column when i equals 1.
if i==1
c(i-1,:)=c(16,:);
end
Error: Subscript indices must either be real positive integers or logicals.
Problem: It gives me above error message as it seems always recognize the c(i-1,:)=c(0,:) first and therefore ignore the statement after that which is equalling to the c(16,:).
Any idea how to solve it?
Réponse acceptée
Plus de réponses (3)
Siddharth Shankar
le 26 Jan 2011
0 votes
if "i" is 1, then you can not index into c with the row index "i-1". MATLAB uses 1-based indexing. You need to "special case" your code to avoid indexing into row 0, or a row value that is negative, as the error message suggests.
Lucy
le 26 Jan 2011
0 votes
2 commentaires
the cyclist
le 26 Jan 2011
Glad you found a solution. Be aware that applying logic functions to handle special cases is in general going to be slower than vectorized solutions like the one I proposed.
Lucy
le 26 Jan 2011
Paulo Silva
le 26 Jan 2011
Lucy there's no need for any if statements or other fancy functions
nrows=16 %choose the number of rows (horizontal lines)
indrow=2:nrows+1 %create the index of the rows, the trick is here (+1)
C(indrow-1,:) %no problem now, indrow-1 is never zero
2 commentaires
the cyclist
le 26 Jan 2011
Lucy's trying tell MATLAB that the row "below" row 1 should be row 16. (Periodic boundary condition.) I don't see how your indexing does this. "indrow-1" seems to just be 1:16. Do I misunderstand?
Paulo Silva
le 26 Jan 2011
Now I understand, thanks for the good explanation :) forget about my code, it just rotates the rows 180º
Catégories
En savoir plus sur Logical dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!