# matrix indexing and creating a new matrix with new size

20 views (last 30 days)
Sobhan on 6 Jun 2012
Dear experts, I hope somebody can help me. I have a n*4 matrix. In a loop I want to index some rows (the range is not fixed) from column 1 and put them in a new matrix with separate columns. I guess since the size of rows are not the same, Matlab gives me the mismatch dimension error for new matrix! Any solution? Thanks in advance Sobhan

Wayne King on 6 Jun 2012
clear output
For f = 1:nfiles
IndexStart= RHs(RHs<peak);
IndexEnd= RHs(RHs>peak);
output{f} = Mydata (Index1:Index2,1);
end
If you know how big output is going to be in advance you can preallocate the cell array.
Sobhan on 6 Jun 2012
thanks Wayne,
your solution only gives me a cell array with the size of output and not a matrix.
Cheers

Wayne King on 6 Jun 2012
How about using a cell array? Beyond that I think you will need to give us a little MATLAB example to illustrate your issue.
Sobhan on 6 Jun 2012
Hi Wayne,
This is a simplified version of my loop.
For f = 1:nfiles
IndexStart= RHs(RHs<peak);
IndexEnd= RHs(RHs>peak);
output (:, f) = Mydata (Index1:Index2,1);
End
only the first file can be saved in output but it gives error for the second file because it has different rows. Is it clear now? Sorry I am really new to matlab.
Cheers
Sobahn

Christoph on 6 Jun 2012
Hi Sobhan,
as Wayne said, an example might be helpful. Nevertheless you might use:
X_new(:,end+1) = [X_old(:,i); zeros(size(X_new, 1) - size(X_old, 1),1)];
in your loop as long as the length of the old matrix is shorter or equal as the length of the new one. But waynes answer is the "politcally correct" one.
##### 2 CommentsShowHide 1 older comment
Christoph on 6 Jun 2012
ok, try to implement the next few nasty codelines:
if length(X_new) < length(X_old)
X_new(end+1,:) = zeros(length(X_old)-length(X_new), size(X_new, 2))
end

Sobhan on 8 Jun 2012
Cell array was the solution: output{f} = Mydata (Index1:Index2,1)