user2305193
user2305193

Reputation: 2059

make iterative variable a cell array in matlab

In matlab, is it possible to make the iterative variable a cell array? is there a workaround? This is the code I ideally want, but throws errors:

dim={};
a=magic(5);
for dim{1}=1:5
  for dim{2}=1:5
    a(dim{:})=1; %aimed to be equivalent to a(dim{1},dim{2})=1;
  end 
end


for dim{1}=1:5
       ↑
Error: Invalid expression. When calling a function or indexing a variable, use
parentheses. Otherwise, check for mismatched delimiters.

Upvotes: 0

Views: 90

Answers (1)

Zizy Archer
Zizy Archer

Reputation: 1390

I tested that you cannot have A(1), or A{1} or A.x as index variable. https://www.mathworks.com/help/matlab/ref/for.html doesn't explicitly prohibit that, but it doesn't allow it either.

After very slight changes on your code, this should achieve what you seem to want:

dim={};
a = magic(5);
for dim1=1:5
   dim{1} = dim1;
   for dim2=1:5
      dim{2} = dim2;
      a(dim{:})=1; %aimed to be equivalent to a(dim{1},dim{2})=1;
   end
end

However, I believe the following is a slightly better solution keeping the spirit of "use a cell array to index in your array":

CV = combvec(1:5,1:5); % get all combinations from (1,1) to (5,5). 2x25 double array. This function is a part of deep learning toolbox. Alternatives are available.
CM = num2cell(CV); % 2x25 cell array. Each element is a single number.
for dim = CM
% dim is a 2x1 cell array, eg {2,3}.
   a(dim{:}) = 1; % as above.
end

However, none of these are likely a good solution to the underlying problem.

Upvotes: 1

Related Questions