Subscripted assignment dimension mismatch. error in for loop
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
for i = 1 : (length(locs_min)*2) + 1;
output2(:,i+1) = output(locs_min(i):locs_max(i));
i = i + 1;
n = n + 1;
end
gives error:
|Subscripted assignment dimension mismatch.
Error in Ralphuh (line 74) output2(:,i+1) = output(locs_min(i):locs_max(i));|
output2 is a new variable, output is a 53957x1 double array, and locs_min and locs_max are both 1x538 double arrays.
I have tried transposing the different matrices, changing around the format of my indices, etc...nothing seems to work, please help, thanks!
0 commentaires
Réponses (3)
dpb
le 2 Nov 2015
Unless the difference between the indices is the same for each iteration, you'll "go boom" the first time the length is different than the preceding.
Use a cell array in this case instead...Matlab's only support for "jagged" arrays.
2 commentaires
dpb
le 3 Nov 2015
Precisely what you see as the error and go on to explain is similar to what I presumed; the lengths of the various subsections aren't the same from one step to the next. If, say the first is min-max -->[1 20] the array will have been allocated by the first assignment as 1,20. Now if the next two locations are [21 40], you're fine but as soon as one isn't precisely 20 elements, then the assignment to that row will be off in the second dimension.
for i=1:length(locs_min)
output2{i} = output(locs_min(i):locs_max(i));
end
output will now be a cell array of the number of elements in the two location arrays. The {} curlies in the indexing instead of () normal parens make it such.
Star Strider
le 2 Nov 2015
What do you want to do?
5 commentaires
Star Strider
le 3 Nov 2015
What you want to do will only work if the vectors are at least (or can be truncated to be exactly) 1000 elements long.
Guessing here since I don’t know how your data are organised, but something like this should work:
Vc = {1:1111}; % Original Cell Vector
V = Vc{1}(1:1000); % Original Cell Vector (Truncated)
V = V(:); % Convert To Column Vector
Vr = reshape(V(:), 100, 10); % Reshape To Desired Matrix
drVr = diff(Vr, [], 2); % Differences Along Columns
dcVr = diff(Vr, [], 1); % Differences Along Rows
I’m not quite certain what you want with respect to diff, so I present you with two options.
Ralph
le 3 Nov 2015
1 commentaire
Star Strider
le 3 Nov 2015
My pleasure.
Note that the zeros are valid data. It might be best to pad them with NaN instead. However, I would see if the code in my comment to my Question does what you want before your start with padded matrices.
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!