采取以下MWE
for q = { {1,2}, {3,4} }
disp(q{1}) % Displays 1x2 cell array
disp(q{1}{1}) % Displays first element
end
这给出了输出
[1] [2]
1
[3] [4]
3
换句话说,q
变为{{1,2}}
而不是{1,2}
。我原本期望后一种行为。
这种行为有什么理由吗?在使用q=q{1}
之前,我很难想象你不想做q
的情景。或者我在设置循环时做错了什么?
答案 0 :(得分:1)
声明
for index = valArray
即使()
是一个单元格数组,Matlab也会应用valArray
索引。正如documentation所说,
在每次迭代时,从数组
index
的后续列创建列向量valArray
。例如,在第一次迭代中,index = valArray(:,1)
。循环最多执行n
次,其中n
是由valArray
给出的numel(valArray(1,:))
列数。输入valArray
可以是任何MATLAB数据类型,包括字符向量,单元数组或结构。
至于为什么它的行为如此,我看到两个原因。首先,要保持for
循环的语义:它始终应用()
索引。
其次,考虑ValArray
是2D单元阵列的情况,例如
valArray = {1, 'aa', [];
'hey', {10 20}, 'bbb'};
在{}
循环中应用for
索引与在每次迭代中选择列不兼容。例如,在第一次迭代中,您将获得两个值,即1
和hey
。为确保index
获得一个值,需要将它们保存在({列})单元格数组{1; 'hey'}
中,这是for
所做的。