get error when remove an item
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hi, i want to remove an item from array, but get error
this is my code
align(1,:)='asd-as---tyr';
align(2,:)='fg--ds--h-ty';
for i=1:12
if align(1,i)=='-' & align(2,i)=='-'
align(1,i)=[]; align(2,i)=[];
end
end
??? A null assignment can have only one non-colon index.
Error in ==> testt at 6
align(1,i)=[];
thanks in advance
0 commentaires
Réponse acceptée
Jan
le 2 Mar 2012
When you remove a character, the string is getting shorter. But the FOR-loop tries to access all characters of the initial size.
Either run the loop in reverse direction:
align(1,:) = ['asd-as---tyr'; ...
'fg--ds--h-ty'];
for i=12:-1:1
if align(1,i)=='-' & align(2,i)=='-'
align(:,i) = [];
end
end
Or use a vectorized approach, which is faster and nicer:
align(align(1, :)=='-' & align(2, :)=='-', :) = []; % No FOR loop, no IF
[EDITED]: Typo in the line above (thanks Walter!):
align(:, align(1, :)=='-' & align(2, :)=='-') = [];
3 commentaires
Walter Roberson
le 2 Mar 2012
align(:, align(1, :)=='-' & align(2, :)=='-') = []; % No FOR loop, no IF
Plus de réponses (2)
Aurelien Queffurust
le 2 Mar 2012
To remove the minus sign you could use:
align= char(strrep(align(1,:),'-','') ,strrep(align(2,:),'-','') )
0 commentaires
the cyclist
le 2 Mar 2012
I can see how you would find that error message a bit cryptic, but here is what is going on.
Your variable align is a 2x12 character array. With your line of code
align(1,i)=[];
is going to attempt to remove the upper-left corner of that array. But MATLAB can't do that. There cannot be a character array that has one row of 11 elements, and a second row that is 12 elements. One element cannot be "empty" in that way. (That is what error message is saying.) You can only do the null assignment for a whole row or column at once.
So, in your case, you could combine your two null assignment statements into the single statement
align(:,i) = [];
and MATLAB will delete the i'th column, in its entirety.
Be aware that your array align is going to keep getting trimmed, as it goes through the for loop, so it will no longer be width 12.
3 commentaires
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements 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!