Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

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

Asked by Sam on 10 May 2013

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 Comments

Sam

Products

No products are associated with this question.

1 Answer

Answer by the cyclist on 10 May 2013
Edited by the cyclist on 10 May 2013
Accepted answer

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 Comments

Sam on 10 May 2013

Thanks, Cyclist. That made progress yet led to a dreaded error I've hit numerous times but don't fully understand. This is my first attempt at a nested for loop. Can you offer more help? There is no other add'l code, although FYI each 'vars' is a 20x1 cell of n x m arrays.

vars = {'Cs' 'beta' 'As' 'TCI' 'TWI' 'hs'}
tmp = cell(size(dem))
out = tmp;
tmp2 = size(vars)
out2 = zeros(tmp2);
for i=1:numel(dem)
  for j=1:numel(vars)
      out2_tmp = out2(:,:,j);
      out{i} = out2_tmp(Cs{i}, beta{i}, As{i}, TCI{i}, TWI{i}, hs{i});
  end
end

Subscript indices must either be real positive integers or logicals.

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.

the cyclist

Contact us