Subscripted assignment dimension mismatch. error in for loop
조회 수: 2 (최근 30일)
이전 댓글 표시
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
답변 (3개)
dpb
2015년 11월 2일
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
dpb
2015년 11월 3일
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
2015년 11월 2일
What do you want to do?
댓글 수: 5
Star Strider
2015년 11월 3일
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
2015년 11월 3일
댓글 수: 1
Star Strider
2015년 11월 3일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!