Error Using Horzcat: Dimensions of matrices being concatenated are not consistent

1 view (last 30 days)
I am receiving the following error message:
Error using horzcat
Dimensions of matrices being concatenated are not consistent.
Error in test (line 55)
goodPoints = [goodPoints1, goodPoints2];
where
%
goodPoints1 = find((utcTime >= utcStarts1(jj)) &( utcTime <utcEnds1(jj)));
goodPoints2 = find((utcTime >= utcStarts2(jj)) &( utcTime <utcEnds2(jj)));
goodpoints1 is a 9532x1 double and goodpoints2 is a 8270x1 double
From my understanding this error shows because the two do not have the same number of rows. What alternatives can I use to fix this error? (in the most layman's terms possible!) Thank you for any help!
  2 Comments
Star Strider
Star Strider on 20 Jan 2016
Your variables ‘goodPoints1’ and ‘goodPoints2’ are vectors of indices, so their order may be important.
What do you want to do with them?
goyanks1989
goyanks1989 on 20 Jan 2016
'goodpoints1' and 'goodpoints2' represent two separate time periods that I am trying to plot the associated variables with (I am not interested in the block of time between the 'goodpoints1' and 'goodpoints2')
My previous error was:
%
Index exceeds matrix dimensions.
Error in NonConvective (line 74)
bigDATA(ii, bigDATAstart:(bigDATAstart - 1 +length(goodPoints))) = a(goodPoints);
when I had it formatted like this:
%
goodPoints1=(utcStarts1(jj):1:utcEnds1(jj));
goodPoints2=(utcStarts2(jj):1:utcEnds2(jj));
goodPoints=[(goodPoints1), (goodPoints2)];
%
and I believe the error was in 'a(goodpoints)' as what this was generating corresponded to the actual time value, not the location in the array (ex. the first value would come up as 50000 utc but I want it to be 1)
This is why I fixed the code to
%
goodPoints1 = find((utcTime >= utcStarts1(jj)) &( utcTime <utcEnds1(jj)));
goodPoints2 = find((utcTime >= utcStarts2(jj)) &( utcTime <utcEnds2(jj)))
But now I get the horzcat error because (I think) in goodPoints = [goodPoints1, goodPoints2], the number of rows are different in each one.

Sign in to comment.

Answers (1)

Star Strider
Star Strider on 20 Jan 2016
Put them in a cell array instead (note the curly brackets ‘{}’):
goodPoints = {goodPoints1, goodPoints2};
Cell arrays are a bit more difficult to work with (you have to retrieve the elements of the array to calculate with it, for instance), but are quite useful in storing data such as you want to.
  4 Comments
Star Strider
Star Strider on 20 Jan 2016
Edited: Star Strider on 20 Jan 2016
You need to reference either column of ‘goodPoints’ here. For example:
bigDATA(ii, bigDATAstart:(bigDATAstart - 1 +length(goodPoints{1}))) = a(goodPoints{1});
although I have no idea if that is what you want to do.
My pleasure.

Sign in to comment.

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!