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

조회 수: 42 (최근 30일)
Sam
Sam 2013년 5월 10일
댓글: Walter Roberson 2016년 12월 21일
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.

채택된 답변

the cyclist
the cyclist 2013년 5월 10일
편집: the cyclist 2013년 5월 10일
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
Sam
Sam 2013년 5월 10일
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
the cyclist 2013년 5월 10일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Bhargavkrishna Kondreddy
Bhargavkrishna Kondreddy 2016년 10월 26일
% 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
Walter Roberson
Walter Roberson 2016년 12월 21일
MATLAB does not have implicit multiplication. You need to add * as appropriate.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by