在matlab中使迭代变量成为单元数组

在matlab中使迭代变量成为单元数组,matlab,Matlab,在matlab中,是否可以将迭代变量设置为单元数组?有解决办法吗?这是我理想中想要的代码,但会引发错误: 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 fu

在matlab中,是否可以将迭代变量设置为单元数组?有解决办法吗?这是我理想中想要的代码,但会引发错误:

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.

我测试了不能将(1)、或{1}或A.x作为索引变量。没有明确禁止,但也不允许

在对代码进行非常细微的更改后,这应该可以实现您想要的:

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
但是,我相信以下是一个更好的解决方案,它保持了“使用单元格数组在数组中建立索引”的精神:


但是,这些都不可能是解决根本问题的好办法。

想知道哪种编程语言允许类似于您实际想要实现的功能吗?你为什么需要这样一个结构?闻起来有点……这怎么比在循环中使用两个变量(即
dim1,dim2
)容易呢?首先:这是一个faff问题,毫无疑问。我只是想知道这是否可能,这里的matlab社区确实有一个疯狂的知识库。这里有一个用例:假设你有10个for循环,然后是一个接受许多单独参数的函数。您可以键入f(ind,knd,jnd,…)或简单地输入所有循环变量,如f(ind{:})。再一次,我可以想办法解决这个问题。fwiw,这是八度音阶。
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