我想对数组中的每个元素做一些事情。对于行数组,我可以这样做:
array = [1 2 3];
i = 0;
for a = array
i = i + 1;
end
fprintf('Number of iterations: %g\n', i)
Number of iterations: 3
它将输出3,因此它实际上一个接一个地访问每个数组元素。
但是如果数组是一列,则相同的代码只输出1:
array = [1; 2; 3];
...
Number of iterations: 1
我想知道为什么会发生这种情况,如果有办法迭代一个数组,独立于它的“方向维度”而不使用for i = 1:numel(array), a = array(i)
。
答案 0 :(得分:1)
当使用数组初始化for循环时,它会逐列迭代。这可能不是您想要的,而是内置行为(请参阅http://www.mathworks.com/help/matlab/ref/for.html)。
您可以将矩阵强制为线性行向量,因此MATLAB将使用以下内容逐个迭代元素:
for i = A(:)'
i % use each value of A
end
通常,向量运算的组合将比for循环更快,因此当您无法想到相应的向量运算时,只使用for循环。