Index exceeds matrix dimensions.

2 views (last 30 days)
f = figure('Position',[10 10 600 600]);
dat = {-1,1,1;0,-1,0;0,0,-1;1,0,0};
cnames = {'1','2','5'};
rnames = {'1','2','3','4'};
t = uitable('Parent',f,'Data',dat,'ColumnName',cnames,...
'RowName',rnames,'Position',[10 10 590 590]);
blnA = logical( A == -1 );
blnOut = find(any(A == -1,2));
rnames{max(blnOut)};
negcolumn = find(A(min(blnOut),:) == 1);
cnames{max(negcolumn)};
dU(5)=7;
dU(cnames{max(negcolumn)})
Error message occurred. I couldn't find the mistake.(cnames{max(negcolumn)})=5 So it must be dU(5)=7 but error message
Index exceeds matrix dimensions.
  1 Comment
the cyclist
the cyclist on 8 Jun 2013
I cannot run your code, because I do not have the array A. Is it possible for you to post self-contained code that will execute and show that error?

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 8 Jun 2013
Perhaps
A = cell2mat(dat);
but I can't figure out what dU is for - it's not being used. Anyway, look at this code:
dU(5)=7;
maxValue = max(negcolumn)
index = cnames{maxValue} % Gives string '5'
dU(5) % Works fine.
dU(cnames{max(negcolumn)}) % dU('5') = du(53) which is not defined because dU has only 5 elements.
You can't have the string '5' be the index into an array. Perhaps you wanted cnames to be a cell array that stored integers, not strings:
cnames = {1,2,5};
which works, though I still don't know what you're after.

More Answers (1)

Walter Roberson
Walter Roberson on 8 Jun 2013
You have not defined dU()
cnames indexed by a number gives you a string. Indexing an array by a string is not impossible but seldom gives the expected answer: in your case it would be equivalent to asking for dU([49 50])
You need to remember that '1','2','5' are strings and that you almost never index arrays at strings; arrays get indexed at row numbers and column numbers.
If you need to be able to access an array by the name of a row, or the name of a column, then you need to use the MATLAB database object, which is part of the Statistics toolbox.
  5 Comments
Walter Roberson
Walter Roberson on 8 Jun 2013
Here, index is the string '35', not the numeric value 35.
Image Analyst
Image Analyst on 8 Jun 2013
See my answer to your new explanation in your duplicate question: http://www.mathworks.com/matlabcentral/answers/78455#answer_88183

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!