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

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 commentaires

Your variables ‘goodPoints1’ and ‘goodPoints2’ are vectors of indices, so their order may be important.
What do you want to do with them?
'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.

Connectez-vous pour commenter.

Réponses (1)

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 commentaires

Thank you, that fixed the previous error but now I am getting
Function 'subsindex' is not defined for values of class 'cell'.
Error in test (line 75)
bigDATA(ii, bigDATAstart:(bigDATAstart - 1 +length(goodPoints))) = a(goodPoints);
Do you know what this means? Thank you.
It means I have no idea what you’re doing!
The cell array I suggested has two different and unequal columns of index values. You have to refer to it something like this:
goodPoints = {randi(9, 10, 1) randi(9, 15, 1)};
a = randi([50 99], 9, 1);
output = a(goodPoints{1});
This is entirely synthetic code and is not what you are doing, but it illustrates the correct way to use a cell array of indices.
I wish I had a better idea of what I was doing as well. Thank you for your help
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.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by