# indexing error: ()-indexing must appear last in an index expression

127 views (last 30 days)
Sam on 10 May 2013
Commented: Walter Roberson on 21 Dec 2016
Do you know what is wrong with my indexing below? Thanks.
vars = {'Cs' 'beta' 'As' 'TCI' 'TWI' 'hs'}
tmp = cell(size(dem)) % create 20x1 supercell
out = tmp;
tmp2 = size(vars) % create 6x1 subarrays
out2 = zeros(tmp2);
for i=1:numel(dem)
for j=1:numel(vars)
*out{i} = out2(:,:,j)(Cs{i}, beta{i}, As{i}, TCI{i}, TWI{i}, hs{i});*
end
end
Error: ()-indexing must appear last in an index expression.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

the cyclist on 10 May 2013
Edited: the cyclist on 10 May 2013
In MATLAB you cannot index into an array that you've already indexed into, so you cannot do this
out{i} = out2(:,:,j)(Cs{i}, beta{i}, As{i}, TCI{i}, TWI{i}, hs{i})
But assuming the rest of your code is OK (which I could not check), then you could define a temp variable
out2_tmp = out2(:,:,j);
out{i} = out2_tmp(Cs{i}, beta{i}, As{i}, TCI{i}, TWI{i}, hs{i})
##### 2 CommentsShowHide 1 older comment
the cyclist on 10 May 2013
I can't really help debug your code, because it is not self-contained. However, I can give insight into that error.
x = [2 7 6 3];
idx_valid_integers = [1 3 4 2];
idx_valid_logical = [true true false true];
idx_invalid = [-1 0];
% Valid indexing
y = x(idx_valid_integers);
% Also valid indexing [using logical indexing]
y = x(idx_valid_logical);
% Not valid indexing (index is neither positive integer nor logical)
y = x(idx_invalid); % This will give you that same error.
The first two ways of indexing work, because I am either telling MATLAB a particular element (by its position) or by applying a logical "mask" to the entire vector.
But the third way does not work. What is the "-1" or "zeroth" element of a vector. It makes no sense.
Somehow, that is what you are doing in your code.

Sign in to comment.

### More Answers (1)

Bhargavkrishna Kondreddy on 26 Oct 2016
% Importing all the 300 files
files = dir( 'imageset1_*.txt'); for i=1:numel(files) A{i} = dlmread( files(i).piv, '\t', 3 , 0 ); end
% Summation of X-components of the 300 files
Xsum ='A('1)(:,3); for k = 2:299 Xsum=Xsum+A(k)(:,3); end () indexing must appear last in an index expression at
##### 1 CommentShowHide None
Walter Roberson on 21 Dec 2016
MATLAB does not have implicit multiplication. You need to add * as appropriate.

Sign in to comment.

### Categories

Find more on Loops and Conditional Statements 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!