Effacer les filtres
Effacer les filtres

why do I get "Matrix dimensions must agree" when using "<"

1 vue (au cours des 30 derniers jours)
Rong
Rong le 21 Oct 2014
Commenté : Matt Tearle le 21 Oct 2014
iless={};
igreater={};
TimeVecmin={};
T1=T-60;
T2=T+60;
for i = 1:length(MiceCond)
TimeVecmin{i}=TimeVec{i}*20/1000/60;
iless{i}=TimeVecmin{i}<T & TimeVecmin{i}>T1;
igreater{i}=TimeVecmin{i}>T & TimeVecmin{i}<T2;
end
in the above code, T is the number that the user give the input, eg. 60 or 70. TimeVec is a 1*6 cell array. I can run
iless{1}=TimeVecmin{1}<T & TimeVecmin{1}>T1;
or any given number for i, but once I put it within the cycle, it shows the Matrix dimension error. How does this happen?

Réponses (3)

Orion
Orion le 21 Oct 2014
Modifié(e) : Orion le 21 Oct 2014
Hi,
What is the length of MiceCond ?
if length(MiceCond) is more than 6 (length of TimeVec) then you're gonna get an error.
  1 commentaire
Rong
Rong le 21 Oct 2014
MiceCond is a 1*6 cell array. So the length of MiceCond is 6 also.

Connectez-vous pour commenter.


Matt Tearle
Matt Tearle le 21 Oct 2014
Modifié(e) : Matt Tearle le 21 Oct 2014
Given the form of the error message and your comment that it works for a given value of i (presumably at the command line), but not in the loop (presumably running a script/function), I'm going to take a guess that somehow you're getting a different T than what you're using when you try it manually for a given i.
Can you show the code for where T comes from? Or just set a breakpoint and check what T is when the error occurs:
dbstop if error
Then run your program. When the error happens, you'll enter debug mode. Check the value of T. Then dbquit when you're done.
I'm speculating that T is a string or something like that. So it's being converted into a 2-element numeric vector, hence the error.
[Oh, and dbclear if error when you're done figuring out the problem and don't want it to stop on errors anymore :)]
  2 commentaires
Rong
Rong le 21 Oct 2014
Modifié(e) : Image Analyst le 21 Oct 2014
here it is:
[fileName, pathName] = uigetfile('*.txt', 'Select the .txt file', path);
data = importdata([pathName fileName]);
T=fileName;
stimstart=input(['When was stimulation started for ', T, ' (in min)? ']);
So T is given when file is loaded. the file is txt file.
Matt Tearle
Matt Tearle le 21 Oct 2014
So T is a file name. Even if you try to turn that into a number somehow (which doesn't happen in the code you've shown), there are many ways for that to go horribly wrong. You should definitely examine what T is in the loop (or just before it). Either use the dbstop approach I mentioned or simply add disp(T) and/or whos T right before the loop. What do you get?
Are you sure it's not stimstart you want to be using instead of T...?

Connectez-vous pour commenter.


Orion
Orion le 21 Oct 2014
so T is a string (= fileName)?
and then you do
T1=T-60;
T2=T+60;
it seems that you need to convert your data.
  1 commentaire
Rong
Rong le 21 Oct 2014
Thank you! But I add as T=str2num('T');
it still shows
Error using < Matrix dimensions must agree.
Error in feed20state2 (line 65) iless{i}=TimeVecmin{i}<T & TimeVecmin{i}>T1;

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by