MATLAB Answers

matrix indexing and creating a new matrix with new size

20 views (last 30 days)
Sobhan
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

  0 Comments

Sign in to comment.

Accepted Answer

Wayne King
Wayne King on 6 Jun 2012
How about
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.

  1 Comment

Sobhan
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

Sign in to comment.

More Answers (3)

Wayne King
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.

  1 Comment

Sobhan
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

Sign in to comment.


Christoph
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 Comments

Sobhan
Sobhan on 6 Jun 2012
Hi,
Thanks for the answer. I gave an example above.
The length of the new matrix is sometimes bigger sometimes smaller. I think I need something to add a new column with the size of new file to previously created matrix. I am trying to figure it out.
Cheers
Christoph
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

Sign in to comment.


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

  0 Comments

Sign in to comment.

Sign in to answer this question.